Dépôt officiel du code source de l'ERP OpenConcerto
/trunk/OpenConcerto/src/org/openconcerto/erp/action/NouvelleConnexionAction.java |
---|
35,6 → 35,9 |
import org.openconcerto.erp.rights.MenuComboRightEditor; |
import org.openconcerto.erp.utils.NXDatabaseAccessor; |
import org.openconcerto.map.model.Ville; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.PropsConfiguration; |
import org.openconcerto.sql.TM; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLBackgroundTableCache; |
import org.openconcerto.sql.model.SQLBase; |
64,6 → 67,7 |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.JImage; |
import org.openconcerto.utils.cc.IClosure; |
import org.openconcerto.utils.i18n.TranslationManager; |
import java.awt.Color; |
import java.awt.GridBagConstraints; |
81,6 → 85,7 |
import java.util.logging.Level; |
import javax.swing.Action; |
import javax.swing.JComponent; |
import javax.swing.JFrame; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
203,6 → 208,7 |
final String socTitle = comptaPropsConfiguration.getRowSociete() == null ? "" : ", [Société " + comptaPropsConfiguration.getRowSociete().getString("NOM") + "]"; |
f.setTitle(comptaPropsConfiguration.getAppName() + " " + version + socTitle); |
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); |
} |
}); |
final FutureTask<?> showMainFrame = new FutureTask<Object>(new Runnable() { |
275,11 → 281,29 |
c.fill = GridBagConstraints.BOTH; |
this.connexionPanel = ConnexionPanel.create(r, image, !Gestion.isMinimalMode()); |
if (this.connexionPanel == null) |
final List<Locale> langs = Arrays.asList(Locale.FRANCE, Locale.CANADA_FRENCH, new Locale("fr", "CH"), new Locale("fr", "BE"), Locale.UK, Locale.CANADA, Locale.US, Locale.GERMANY, |
new Locale("de", "CH"), new Locale("es", "ES"), new Locale("pl", "PL")); |
if (this.connexionPanel == null) { |
final Locale locale = UserProps.getInstance().getLocale(); |
// for next launch |
UserProps.getInstance().setLocale(locale); |
// for current run |
((PropsConfiguration) Configuration.getInstance()).setLocale(locale); |
// for code that will never need more than one Locale concurrently |
// (e.g. used by TM singletons in various packages) |
Locale.setDefault(locale); |
// as explained in Locale.setDefault() javadoc : "be prepared to reinitialize |
// locale-sensitive code" |
JComponent.setDefaultLocale(locale); |
// throw RuntimeException like ResourceBundle.getBundle() at the beginning of this |
// method |
TranslationManager.createDefaultInstance(); |
TM.getInstance(); |
return null; |
this.connexionPanel.initLocalization(getClass().getName(), Arrays.asList(Locale.FRANCE, Locale.CANADA_FRENCH, new Locale("fr", "CH"), new Locale("fr", "BE"), Locale.UK, Locale.CANADA, |
Locale.US, Locale.GERMANY, new Locale("de", "CH"), new Locale("es", "ES"), new Locale("pl", "PL"))); |
} |
this.connexionPanel.initLocalization(getClass().getName(), langs); |
p.add(this.connexionPanel, c); |
final PanelFrame panelFrame = new PanelFrame(p, "Connexion"); |
panelFrame.setLocationRelativeTo(null); |
299,12 → 323,12 |
@Override |
public void run() { |
// laisse le temps au logiciel de demarrer |
ClasseCompte.loadClasseCompte(comptaConf); |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
e.printStackTrace(); |
} |
ClasseCompte.loadClasseCompte(); |
CaisseCotisationSQLElement.getCaisseCotisation(); |
SQLPreferences prefs = SQLPreferences.getMemCached(comptaConf.getRootSociete()); |
/trunk/OpenConcerto/src/org/openconcerto/erp/action/CreateFrameAbstractAction.java |
---|
50,9 → 50,12 |
final Object name = action.getValue(Action.NAME); |
WindowStateManager stateManager = null; |
if (name != null) { |
stateManager = new WindowStateManager(frame, new File(conf.getConfDir(), "Configuration" + File.separator + "Frame" + File.separator + name.toString() + ".xml"), |
true); |
if (conf == null) { |
System.err.println("Warning: no configuration for action " + action + ", unable to use a window state manager."); |
} else { |
stateManager = new WindowStateManager(frame, new File(conf.getConfDir(), "Configuration" + File.separator + "Frame" + File.separator + name.toString() + ".xml"), true); |
} |
} else { |
System.err.println("Warning: no action name for action " + action + ", unable to use a window state manager."); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/injector/CmdEltFactEltSQLInjector.java |
---|
New file |
0,0 → 1,27 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.injector; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLInjector; |
public class CmdEltFactEltSQLInjector extends SQLInjector { |
public CmdEltFactEltSQLInjector(final DBRoot root) { |
super(root, "COMMANDE_ELEMENT", "FACTURE_FOURNISSEUR_ELEMENT", false); |
createDefaultMap(); |
if (getDestination().contains("ID_COMMANDE_ELEMENT")) { |
map(getSource().getKey(), getDestination().getField("ID_COMMANDE_ELEMENT")); |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/injector/BrEltFactEltSQLInjector.java |
---|
New file |
0,0 → 1,30 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.injector; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLInjector; |
public class BrEltFactEltSQLInjector extends SQLInjector { |
public BrEltFactEltSQLInjector(final DBRoot root) { |
super(root, "BON_RECEPTION_ELEMENT", "FACTURE_FOURNISSEUR_ELEMENT", false); |
createDefaultMap(); |
if (getDestination().contains("ID_COMMANDE_ELEMENT") && getSource().contains("ID_COMMANDE_ELEMENT")) { |
map(getSource().getField("ID_COMMANDE_ELEMENT"), getDestination().getField("ID_COMMANDE_ELEMENT")); |
} |
if (getDestination().contains("ID_BON_RECEPTION_ELEMENT")) { |
map(getSource().getKey(), getDestination().getField("ID_BON_RECEPTION_ELEMENT")); |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/gestcomm/RelanceSheet.java |
---|
18,6 → 18,7 |
import org.openconcerto.erp.generationDoc.AbstractJOOReportsSheet; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowListRSH; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.users.UserManager; |
65,6 → 66,12 |
} |
// Infos societe |
map.put("SocieteType", rowSoc.getString("TYPE")); |
map.put("SocieteTel", rowSoc.getString("NUM_TEL")); |
map.put("SocieteFax", rowSoc.getString("NUM_FAX")); |
map.put("SocieteRCS", rowSoc.getString("RCS")); |
map.put("SocieteSiret", rowSoc.getString("NUM_SIRET")); |
map.put("SocieteAPE", rowSoc.getString("NUM_APE")); |
map.put("SocieteCapital", GestionDevise.currencyToString(rowSoc.getBigDecimal("CAPITAL"))); |
map.put("SocieteNom", rowSoc.getString("NOM")); |
map.put("SocieteAdresse", rowSocAdresse.getString("RUE")); |
map.put("SocieteCodePostal", rowSocAdresse.getString("CODE_POSTAL")); |
137,19 → 144,27 |
SQLSelect sel = new SQLSelect(); |
sel.addSelect(this.rowRelance.getTable().getKey()); |
sel.addSelect(this.rowRelance.getTable().getField("DATE")); |
sel.setWhere(new Where(this.rowRelance.getTable().getField("ID_SAISIE_VENTE_FACTURE"), "=", this.rowRelance.getInt("ID_SAISIE_VENTE_FACTURE"))); |
sel.addFieldOrder(this.rowRelance.getTable().getField("DATE")); |
@SuppressWarnings("unchecked") |
List<Map<String, Number>> listResult = Configuration.getInstance().getBase().getDataSource().execute(sel.asString()); |
List<SQLRow> listResult = SQLRowListRSH.execute(sel); |
String oldDateRelance = ""; |
if (listResult != null && listResult.size() > 0) { |
Map<String, Number> o = listResult.get(0); |
Number n = o.get(this.rowRelance.getTable().getKey().getName()); |
SQLRow rowOldRelance = this.rowRelance.getTable().getRow(n.intValue()); |
SQLRow rowOldRelance = listResult.get(0); |
Date dOldRelance = (Date) rowOldRelance.getObject("DATE"); |
map.put("DatePremiereRelance", dateFormat2.format(dOldRelance)); |
for (SQLRow rowOldR : listResult) { |
oldDateRelance += dateFormat2.format((Date) rowOldR.getObject("DATE")) + ", "; |
} |
} else { |
map.put("DatePremiereRelance", ""); |
} |
map.put("DateAncienneRelance", oldDateRelance); |
return map; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/OOXMLElement.java |
---|
212,4 → 212,7 |
return (k == null) ? false : k.equalsIgnoreCase("true"); |
} |
public boolean isImage() { |
return this.elt.getAttributeValue("type").equalsIgnoreCase("image"); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/OOgenerationXML.java |
---|
20,7 → 20,10 |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.tax.model.TaxeCache; |
import org.openconcerto.erp.preferences.DefaultNXProps; |
import org.openconcerto.openoffice.LengthUnit; |
import org.openconcerto.openoffice.ODFrame; |
import org.openconcerto.openoffice.ODPackage; |
import org.openconcerto.openoffice.spreadsheet.BytesProducer.ByteArrayProducer; |
import org.openconcerto.openoffice.spreadsheet.MutableCell; |
import org.openconcerto.openoffice.spreadsheet.Sheet; |
import org.openconcerto.openoffice.spreadsheet.SpreadSheet; |
56,6 → 59,7 |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import java.util.UUID; |
import javax.swing.JOptionPane; |
import javax.swing.SwingUtilities; |
700,10 → 704,28 |
value = null; |
styleOO = null; |
} |
int tmpCelluleAffect; |
int tmpCelluleAffect = fill(test ? "A1" : loc, value, sheet, tableField.isTypeReplace(), null, styleOO, test, tableField.isMultilineAuto(), tableField.isKeepingEmptyLines()); |
// tmpCelluleAffect = Math.max(tmpCelluleAffect, |
// tableField.getLine()); |
if (tableField.isImage()) { |
OOXMLTableImage tableImage = this.rowRefCache.getOOXMLTableImage(tableField, e, rowElt); |
tmpCelluleAffect = 1; |
try { |
if (tableImage.getImgBytes() != null) { |
MutableCell cell = sheet.getCellAt(test ? "A1" : loc); |
if (!test) { |
final ODFrame<SpreadSheet> frame = cell.addFrame(tableImage.getX(), tableImage.getY(), tableImage.getWidth(), tableImage.getHeight(), LengthUnit.MM); |
frame.addImage(UUID.randomUUID() + ".png", new ByteArrayProducer(tableImage.getImgBytes(), false)); |
} |
tmpCelluleAffect = tableImage.getRowCount(); |
} |
} catch (Exception e1) { |
// TODO popup??? |
e1.printStackTrace(); |
} |
} else { |
tmpCelluleAffect = fill(test ? "A1" : loc, value, sheet, tableField.isTypeReplace(), null, styleOO, test, tableField.isMultilineAuto(), tableField.isKeepingEmptyLines()); |
} |
if (tableField.getLine() != 1 && (!tableField.isLineOption() || (value != null && value.toString().trim().length() > 0))) { |
if (nbCellule >= tableField.getLine()) { |
tmpCelluleAffect = tmpCelluleAffect + nbCellule; |
795,11 → 817,27 |
if (result != null) { |
Object o = elt.getAttributeValue("sheet"); |
int sheet = (o == null) ? 0 : Integer.valueOf(o.toString().trim()); |
if (OOElt.isImage()) { |
OOXMLTableImage tableImage = new OOXMLTableImage(OOElt, elt, row); |
try { |
if (tableImage.getImgBytes() != null) { |
MutableCell cell = spreadSheet.getSheet(sheet).getCellAt(elt.getAttributeValue("location")); |
final ODFrame<SpreadSheet> frame = cell.addFrame(tableImage.getX(), tableImage.getY(), tableImage.getWidth(), tableImage.getHeight(), LengthUnit.MM); |
frame.addImage(UUID.randomUUID() + ".png", new ByteArrayProducer(tableImage.getImgBytes(), false)); |
} |
} catch (Exception e1) { |
// TODO popup??? |
e1.printStackTrace(); |
} |
} else { |
fill(elt.getAttributeValue("location"), result, spreadSheet.getSheet(sheet), OOElt.isTypeReplace(), OOElt.getReplacePattern(), null, false, OOElt.isMultilineAuto(), |
OOElt.isKeepingEmptyLines()); |
} |
} |
} |
} |
private static boolean isIncluded(int filterID, String foreignTable, int id, String fieldWhere, SQLRowAccessor rowElt) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/OOXMLCache.java |
---|
29,6 → 29,7 |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.utils.CompareUtils; |
import org.openconcerto.utils.ListMap; |
import org.openconcerto.utils.Tuple2; |
import org.openconcerto.utils.cc.ITransformer; |
import java.math.BigDecimal; |
39,16 → 40,30 |
import java.util.List; |
import java.util.Map; |
import org.jdom2.Element; |
public class OOXMLCache { |
private ITransformer<List<SQLRowAccessor>, List<SQLRowAccessor>> postProcess = null; |
private Map<SQLRowAccessor, Map<SQLTable, List<SQLRowAccessor>>> cacheReferent = new HashMap<SQLRowAccessor, Map<SQLTable, List<SQLRowAccessor>>>(); |
private Map<String, Map<Integer, SQLRowAccessor>> cacheForeign = new HashMap<String, Map<Integer, SQLRowAccessor>>(); |
private Map<Tuple2<String, SQLRowAccessor>, OOXMLTableImage> cacheImg = new HashMap<>(); |
public void setPostProcess(ITransformer<List<SQLRowAccessor>, List<SQLRowAccessor>> postProcess) { |
this.postProcess = postProcess; |
} |
public OOXMLTableImage getOOXMLTableImage(OOXMLElement x, Element e, SQLRowAccessor r) { |
Tuple2<String, SQLRowAccessor> key = Tuple2.create(e.getAttributeValue("fieldPathEDM"), r); |
if (this.cacheImg.containsKey(key)) { |
return this.cacheImg.get(key); |
} else { |
OOXMLTableImage img = new OOXMLTableImage(x, e, r); |
this.cacheImg.put(key, img); |
return img; |
} |
} |
protected SQLRowAccessor getForeignRow(SQLRowAccessor row, SQLField field) { |
Map<Integer, SQLRowAccessor> c = cacheForeign.get(field.getName()); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/SheetUtils.java |
---|
154,9 → 154,18 |
PdfBoxGraphics2DFontTextDrawer fontTextDrawer = new PdfBoxGraphics2DFontTextDrawerDefaultFonts(); |
final File dir = new File("Fonts"); |
if (dir.exists()) { |
fontTextDrawer.registerFontFromDirectory(dir); |
System.out.println("Using fonts dir : " + dir.getAbsolutePath()); |
for (File f : dir.listFiles()) { |
if (f.isFile() && f.getName().toLowerCase().endsWith(".ttf")) { |
System.out.println("Registering font : " + f.getAbsolutePath()); |
fontTextDrawer.registerFont(f); |
} |
} |
} else { |
System.out.println("No custom fonts dir found : " + dir.getAbsolutePath()); |
} |
// Configure the renderer |
ODTRenderer renderer = new ODTRenderer(doc); |
renderer.setIgnoreMargins(false); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/OOXMLTableImage.java |
---|
New file |
0,0 → 1,193 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.generationDoc; |
import org.openconcerto.erp.core.edm.Attachment; |
import org.openconcerto.erp.core.edm.AttachmentUtils; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.model.graph.Path; |
import org.openconcerto.utils.FileUtils; |
import org.openconcerto.utils.FillMode; |
import org.openconcerto.utils.ImageUtils; |
import org.openconcerto.utils.StringUtils; |
import java.awt.Color; |
import java.awt.image.BufferedImage; |
import java.io.ByteArrayOutputStream; |
import java.io.File; |
import java.io.IOException; |
import java.util.List; |
import javax.imageio.ImageIO; |
import org.jdom2.Element; |
public class OOXMLTableImage { |
private float x = 0; |
private float y = 0; |
private final float width, height; |
private int dpi = 300; |
private final int rowCount; |
// #ffffff |
private String bgColor = "#ffffff"; |
public final static String EDM_URL = "edm://miniature.png"; |
// C://Users/Toto.jpg ou edm://miniature.png (prendre nom miniature) |
private final String url; |
// ID_AFFAIRE.ID_CLIENT |
private String fieldPathEDM; |
private String edmProvider; |
// top,center,bottom |
private String vAlign = "center"; |
// left, center, right |
private String hAlign = "center"; |
private OOXMLElement xmlField; |
private final SQLRowAccessor row; |
public OOXMLTableImage(OOXMLElement xmlField, Element e, SQLRowAccessor row) { |
this.xmlField = xmlField; |
this.row = row; |
this.url = e.getAttributeValue("url"); |
this.fieldPathEDM = e.getAttributeValue("fieldPathEDM"); |
this.edmProvider = e.getAttributeValue("edmProvider"); |
this.width = Float.valueOf(e.getAttributeValue("width")); |
this.height = Float.valueOf(e.getAttributeValue("height")); |
this.rowCount = Integer.valueOf(e.getAttributeValue("rowCount")); |
if (e.getAttributeValue("x") != null && !e.getAttributeValue("x").isEmpty()) { |
this.x = Integer.valueOf(e.getAttributeValue("x")); |
} |
if (e.getAttributeValue("y") != null && !e.getAttributeValue("y").isEmpty()) { |
this.y = Integer.valueOf(e.getAttributeValue("y")); |
} |
} |
private byte[] img = null; |
private boolean cachedImg = false; |
public byte[] getImgBytes() throws IOException { |
if (this.cachedImg) { |
return this.img; |
} else { |
if (this.url.startsWith("edm://")) { |
Path p = new Path(this.row.getTable()); |
final SQLRow r = this.row.asRow(); |
final SQLRow rowToEdm; |
String sourceTableName = r.getTable().getName(); |
int sourceID = r.getID(); |
if (this.fieldPathEDM == null || this.fieldPathEDM.isEmpty() || this.fieldPathEDM.equalsIgnoreCase(".")) { |
rowToEdm = r; |
} else if (this.fieldPathEDM != null && this.fieldPathEDM.equalsIgnoreCase("EDM_PROVIDER")) { |
SpreadSheetCellValueProvider provider = SpreadSheetCellValueProviderManager.get(this.edmProvider); |
rowToEdm = (SQLRow) provider.getValue(new SpreadSheetCellValueContext(r)); |
if (rowToEdm == null) { |
return null; |
} else { |
sourceTableName = rowToEdm.getTable().getName(); |
sourceID = rowToEdm.getID(); |
} |
} else { |
List<String> fields = StringUtils.fastSplit(this.fieldPathEDM, '.'); |
if (fields.size() == 1) { |
sourceTableName = r.getTable().getForeignTable(fields.get(0)).getName(); |
sourceID = r.getForeignID(fields.get(0)); |
} else { |
for (String f : fields) { |
p = p.add(p.getLast().getField(f)); |
} |
rowToEdm = r.getDistantRow(p); |
sourceTableName = rowToEdm.getTable().getName(); |
sourceID = rowToEdm.getID(); |
} |
} |
final SQLTable tableAttachment = this.row.getTable().getTable("ATTACHMENT"); |
SQLRowValues rowVals = new SQLRowValues(tableAttachment); |
rowVals.putNulls(tableAttachment.getFieldsName()); |
SQLRowValuesListFetcher fetcher = SQLRowValuesListFetcher.create(rowVals); |
Where where = new Where(tableAttachment.getField("SOURCE_TABLE"), "=", sourceTableName); |
where = where.and(new Where(tableAttachment.getField("SOURCE_ID"), "=", sourceID)); |
where = where.and(new Where(tableAttachment.getField("NAME"), "=", this.url.replaceAll("edm://", ""))); |
final List<SQLRowValues> rAttachments = fetcher.fetch(where); |
if (rAttachments.isEmpty()) { |
this.cachedImg = true; |
return null; |
} else { |
final SQLRowValues rowValsAttachment = rAttachments.get(0); |
final Attachment a = new Attachment(rowValsAttachment); |
final AttachmentUtils u = new AttachmentUtils(); |
final File f = u.getFile(a); |
BufferedImage unscaledImage = ImageIO.read(f); |
// 1 pouce = 25.4 mmm |
float scale = this.dpi / 25.4f; |
int maxWidth = (int) (this.width * scale); |
int maxHeight = (int) (this.height * scale); |
final BufferedImage im = ImageUtils.createQualityResizedImage(unscaledImage, maxWidth, maxHeight, false, new FillMode.ZoomOut(Color.WHITE), true); |
ByteArrayOutputStream output = new ByteArrayOutputStream(); |
ImageIO.write(im, "PNG", output); |
output.close(); |
this.img = output.toByteArray(); |
this.cachedImg = true; |
return this.img; |
} |
} else |
{ |
this.img = FileUtils.readBytes(new File(this.url)); |
this.cachedImg = true; |
return this.img; |
} |
} |
} |
public String getBgColor() { |
return this.bgColor; |
} |
public int getDpi() { |
return this.dpi; |
} |
public float getX() { |
return this.x; |
} |
public float getY() { |
return this.y; |
} |
public float getWidth() { |
return this.width; |
} |
public float getHeight() { |
return this.height; |
} |
public int getRowCount() { |
return this.rowCount; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/OOXMLTableField.java |
---|
43,6 → 43,9 |
private int idRef; |
private String style = ""; |
public OOXMLTableField(Element eltField, SQLRowAccessor row, SQLElement sqlElt, int id, int filterId, SQLRow rowLanguage, int idRef, OOXMLCache cache) { |
super(eltField, row, sqlElt, id, rowLanguage, cache); |
this.type = eltField.getAttributeValue("type"); |
247,4 → 250,9 |
return this.style; |
} |
public boolean isImage() { |
return this.type.equalsIgnoreCase("image"); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/provider/FormatedGlobalQtyTotalProvider.java |
---|
26,11 → 26,11 |
private final boolean shortName, alwaysShowOnZeroQty, pieceName; |
private static enum Type { |
public static enum Type { |
NORMAL, SHIPMENT |
} |
private final Type type; |
public final Type type; |
private FormatedGlobalQtyTotalProvider(Type t, boolean shortName) { |
this(t, shortName, false, false); |
46,7 → 46,7 |
public Object getValue(SpreadSheetCellValueContext context) { |
final SQLRowAccessor row = context.getRow(); |
final BigDecimal pv = row.getBigDecimal("PV_HT"); |
if (!alwaysShowOnZeroQty && pv.compareTo(BigDecimal.ZERO) == 0) { |
if (!this.alwaysShowOnZeroQty && pv.compareTo(BigDecimal.ZERO) == 0) { |
return null; |
} |
61,10 → 61,8 |
return String.valueOf(qte); |
} |
String result = ""; |
if (qte > 0) { |
if (qte > 1) { |
if (this.alwaysShowOnZeroQty || qte != 0) { |
result += qte + " x "; |
} |
final BigDecimal qteUV = row.getBigDecimal("QTE_UNITAIRE"); |
result += NumericFormat.getQtyDecimalFormat().format(qteUV); |
82,7 → 80,7 |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit", new FormatedGlobalQtyTotalProvider(Type.NORMAL, false)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.deliver.short", new FormatedGlobalQtyTotalProvider(Type.SHIPMENT, true)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.deliver", new FormatedGlobalQtyTotalProvider(Type.SHIPMENT, false)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.deliver.short.with.quantity", new FormatedGlobalQtyTotalProvider(Type.SHIPMENT, true, true, true)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.alwaysnamed.short.with.quantity", new FormatedGlobalQtyTotalProvider(Type.NORMAL, true, true, true)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.alwaysnamed.short", new FormatedGlobalQtyTotalProvider(Type.NORMAL, true, false, true)); |
SpreadSheetCellValueProviderManager.put("supplychain.element.qtyunit.alwaysnamed", new FormatedGlobalQtyTotalProvider(Type.NORMAL, false, false, true)); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/provider/ConditionsReglementDetailsProvider.java |
---|
44,15 → 44,15 |
if (ajours == 0 && njour == 0) { |
if (foreignRow.getBoolean("COMPTANT") != null && !foreignRow.getBoolean("COMPTANT")) { |
r = "Date de facture"; |
r += " Date de facture"; |
} else { |
r = "Comptant"; |
r += " Comptant"; |
} |
} else { |
if (ajours != 0) { |
r = "à" + ajours + ((ajours > 1) ? " jours" : " jour"); |
r += " à " + ajours + ((ajours > 1) ? " jours" : " jour"); |
} |
if (njour > 0 && njour < 31) { |
r += " le " + njour; |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/provider/TotalCommandeClientProvider.java |
---|
24,7 → 24,7 |
public class TotalCommandeClientProvider implements SpreadSheetCellValueProvider { |
public enum TypeTotalCommandeClientProvider { |
HT, TTC; |
HT, TTC, TVA; |
}; |
private final TypeTotalCommandeClientProvider type; |
40,9 → 40,16 |
for (SQLRowAccessor sqlRowAccessor : rows) { |
if (!sqlRowAccessor.isForeignEmpty("ID_COMMANDE_CLIENT")) { |
SQLRowAccessor rowCmd = sqlRowAccessor.getForeign("ID_COMMANDE_CLIENT"); |
total += (this.type == TypeTotalCommandeClientProvider.HT ? rowCmd.getLong("T_HT") : rowCmd.getLong("T_TTC")); |
if (this.type == TypeTotalCommandeClientProvider.HT) { |
total += rowCmd.getLong("T_HT"); |
} else if (this.type == TypeTotalCommandeClientProvider.TVA) { |
total += rowCmd.getLong("T_TVA"); |
} else if (this.type == TypeTotalCommandeClientProvider.TTC) { |
total += rowCmd.getLong("T_TTC"); |
} |
} |
} |
return new BigDecimal(total).movePointLeft(2); |
} |
49,6 → 56,7 |
public static void register() { |
SpreadSheetCellValueProviderManager.put("sales.account.command.total", new TotalCommandeClientProvider(TypeTotalCommandeClientProvider.HT)); |
SpreadSheetCellValueProviderManager.put("sales.account.command.total.ttc", new TotalCommandeClientProvider(TypeTotalCommandeClientProvider.TTC)); |
SpreadSheetCellValueProviderManager.put("sales.account.command.total.tva", new TotalCommandeClientProvider(TypeTotalCommandeClientProvider.TVA)); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/AbstractJOOReportsSheet.java |
---|
312,6 → 312,25 |
return new File(outputPDFDirectory, getFileName() + ".pdf"); |
} |
public void printDocument(PrinterJob job) { |
try { |
final File f = getDocumentFile(); |
if (!f.exists()) { |
generate(false, false, ""); |
} |
final Component doc = ComptaPropsConfiguration.getOOConnexion().loadDocument(f, true); |
doc.printDocument(job); |
doc.close(); |
} catch (Exception e) { |
ExceptionHandler.handle("Impossible d'imprimer le document OpenOffice", e); |
e.printStackTrace(); |
} |
} |
public void exportToPdf() { |
// Export vers PDF |
final File fileOutOO = getDocumentFile(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationMvtFactureFournisseur.java |
---|
16,6 → 16,8 |
import org.openconcerto.erp.core.common.ui.TotalCalculator; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProvider; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProviderManager; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
29,7 → 31,7 |
public class GenerationMvtFactureFournisseur extends GenerationEcritures implements Runnable { |
public static final String ID = "accounting.records.supply.order"; |
public static final String ID = "accounting.records.supplychain.order"; |
private int idFacture; |
private static final String source = "FACTURE_FOURNISSEUR"; |
65,6 → 67,11 |
// AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(ID); |
// provider.putLabel(saisieRow, this.mEcritures); |
this.putValue("NOM", nom); |
AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(ID); |
if (provider != null) { |
provider.putLabel(saisieRow, this.mEcritures); |
} |
this.putValue("ID_JOURNAL", GenerationMvtFactureFournisseur.journal); |
this.putValue("ID_MOUVEMENT", new Integer(1)); |
71,13 → 78,17 |
// on calcule le nouveau numero de mouvement |
if (this.idMvt == 1) { |
SQLRowValues rowValsPiece = new SQLRowValues(pieceTable); |
// provider.putPieceLabel(saisieRow, rowValsPiece); |
rowValsPiece.put("NOM", saisieRow.getObject("NUMERO").toString()); |
if (provider != null) { |
provider.putPieceLabel(saisieRow, rowValsPiece); |
} |
getNewMouvement(GenerationMvtFactureFournisseur.source, this.idFacture, 1, rowValsPiece); |
} else { |
SQLRowValues rowValsPiece = pieceTable.getTable("MOUVEMENT").getRow(idMvt).getForeign("ID_PIECE").asRowValues(); |
// provider.putPieceLabel(saisieRow, rowValsPiece); |
rowValsPiece.put("NOM", saisieRow.getObject("NUMERO").toString()); |
if (provider != null) { |
provider.putPieceLabel(saisieRow, rowValsPiece); |
} |
rowValsPiece.update(); |
this.putValue("ID_MOUVEMENT", new Integer(this.idMvt)); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationMvtReglementChequeClient.java |
---|
13,9 → 13,10 |
package org.openconcerto.erp.generationEcritures; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.MouvementSQLElement; |
import org.openconcerto.erp.core.finance.tax.model.TaxeCache; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
110,6 → 111,31 |
this.putValue("CREDIT", new Long(0)); |
ajoutEcriture(); |
// FIXME remove getConf |
SQLRow rowSoc = ComptaPropsConfiguration.getInstanceCompta().getRowSociete(); |
if (rowSoc.getTable().contains("TVA_ENCAISSEMENT") && rowSoc.getBoolean("TVA_ENCAISSEMENT")) { |
SQLRow rowTaxe = TaxeCache.getCache().getFirstTaxe(); |
if (rowTaxe.contains("ID_COMPTE_PCE_COLLECTE_ENCAISSEMENT")) { |
SQLRowAccessor rowCompteTvaEnc = rowTaxe.getNonEmptyForeign("ID_COMPTE_PCE_COLLECTE_ENCAISSEMENT"); |
SQLRowAccessor rowCompteTvaCol = rowTaxe.getNonEmptyForeign("ID_COMPTE_PCE_COLLECTE"); |
if (rowCompteTvaCol != null && rowCompteTvaEnc != null) { |
Float taux = rowTaxe.getFloat("TAUX"); |
long ht = Math.round(montant / (1.0 + (taux / 100.0))); |
long tva = montant - ht; |
this.putValue("ID_COMPTE_PCE", rowCompteTvaCol.getID()); |
this.putValue("DEBIT", Long.valueOf(tva)); |
this.putValue("CREDIT", Long.valueOf(0)); |
ajoutEcriture(); |
this.putValue("ID_COMPTE_PCE", rowCompteTvaEnc.getID()); |
this.putValue("DEBIT", Long.valueOf(0)); |
this.putValue("CREDIT", Long.valueOf(tva)); |
ajoutEcriture(); |
} |
} |
} |
List<Integer> pieceIDs = new ArrayList<Integer>(); |
pieceIDs.add(mouvementTable.getRow(idMvt).getForeignID("ID_PIECE")); |
lettrageAuto(pieceIDs, this.date); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationReglementAchat.java |
---|
17,6 → 17,8 |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement; |
import org.openconcerto.erp.core.finance.payment.element.ModeDeReglementSQLElement; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProvider; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProviderManager; |
import org.openconcerto.erp.model.PrixTTC; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowValues; |
35,6 → 37,10 |
public class GenerationReglementAchat extends GenerationEcritures { |
public static final String ID = "accounting.records.order.supplychain.payment"; |
// Journal Caisse |
private static final Integer journalCaisse = new Integer(JournalSQLElement.CAISSES); |
private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE"); |
61,6 → 67,10 |
// "Règlement achat" + SOURCE.getNom() ?? |
this.nom = "Règlement achat " + rowFournisseur.getString("NOM") + " (" + typeRegRow.getString("NOM") + ")"; |
AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(ID); |
if (provider != null) { |
provider.putLabel(regMontantRow, this.mEcritures); |
} |
List<SQLRow> l = regMontantRow.getReferentRows(regMontantRow.getTable().getTable("REGLER_MONTANT_ELEMENT")); |
int mvtSource = -1; |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationMvtSaisieKm.java |
---|
14,6 → 14,8 |
package org.openconcerto.erp.generationEcritures; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProvider; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProviderManager; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowValues; |
28,6 → 30,8 |
private int idSaisieKm; |
private static final String source = "SAISIE_KM"; |
public static final String ID = "accounting.records.km"; |
public GenerationMvtSaisieKm(int idSaisieKm) { |
this.idSaisieKm = idSaisieKm; |
} |
47,8 → 51,15 |
this.putValue("ID_MOUVEMENT", new Integer(1)); |
// on calcule le nouveau numero de mouvement |
getNewMouvement(GenerationMvtSaisieKm.source, this.idSaisieKm, 1, (labelSaisie.length() == 0 ? "Saisie au km " : labelSaisie)); |
AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(ID); |
SQLRowValues rowValsPiece = new SQLRowValues(pieceTable); |
rowValsPiece.put("NOM", (labelSaisie.length() == 0 ? "Saisie au km " : labelSaisie)); |
if (provider != null) { |
provider.putPieceLabel(saisieRow, rowValsPiece); |
} |
getNewMouvement(GenerationMvtSaisieKm.source, this.idSaisieKm, 1, rowValsPiece); |
// gnération des ecritures |
SQLTable tableElt = Configuration.getInstance().getRoot().findTable("SAISIE_KM_ELEMENT"); |
List<SQLRow> set = saisieRow.getReferentRows(tableElt); |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationReglementVenteNG.java |
---|
22,6 → 22,9 |
import org.openconcerto.erp.core.finance.payment.element.ModeDeReglementSQLElement; |
import org.openconcerto.erp.core.finance.payment.element.SEPAMandateSQLElement; |
import org.openconcerto.erp.core.finance.payment.element.TypeReglementSQLElement; |
import org.openconcerto.erp.core.finance.tax.model.TaxeCache; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProvider; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProviderManager; |
import org.openconcerto.erp.model.PrixTTC; |
import org.openconcerto.erp.preferences.GestionCommercialeGlobalPreferencePanel; |
import org.openconcerto.sql.Configuration; |
52,6 → 55,8 |
private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE"); |
private static final SQLRow rowPrefsCompte = tablePrefCompte.getRow(2); |
public static final String ID = "accounting.records.invoice.sales.payment"; |
public SQLRow ecrClient = null; |
public GenerationReglementVenteNG(String label, SQLRow rowClient, PrixTTC ttc, Date d, SQLRow modeReglement, SQLRow source, SQLRow mvtSource) throws SQLException { |
81,6 → 86,10 |
// TODO Nommage des ecritures |
this.nom = label; |
AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(ID); |
if (provider != null) { |
provider.putLabel(source, this.mEcritures); |
} |
this.putValue("DATE", this.date); |
this.putValue("NOM", this.nom); |
236,6 → 245,31 |
this.putValue("CREDIT", Long.valueOf(0)); |
ajoutEcriture(); |
// FIXME remove getConf |
SQLRow rowSoc = ComptaPropsConfiguration.getInstanceCompta().getRowSociete(); |
if (rowSoc.getTable().contains("TVA_ENCAISSEMENT") && rowSoc.getBoolean("TVA_ENCAISSEMENT")) { |
SQLRow rowTaxe = TaxeCache.getCache().getFirstTaxe(); |
if (rowTaxe.contains("ID_COMPTE_PCE_COLLECTE_ENCAISSEMENT")) { |
SQLRowAccessor rowCompteTvaEnc = rowTaxe.getNonEmptyForeign("ID_COMPTE_PCE_COLLECTE_ENCAISSEMENT"); |
SQLRowAccessor rowCompteTvaCol = rowTaxe.getNonEmptyForeign("ID_COMPTE_PCE_COLLECTE"); |
if (rowCompteTvaCol != null && rowCompteTvaEnc != null) { |
Float taux = rowTaxe.getFloat("TAUX"); |
long tva = ttc.calculLongTVA(taux / 100.0); |
this.putValue("ID_COMPTE_PCE", rowCompteTvaCol.getID()); |
this.putValue("DEBIT", Long.valueOf(tva)); |
this.putValue("CREDIT", Long.valueOf(0)); |
ajoutEcriture(); |
this.putValue("ID_COMPTE_PCE", rowCompteTvaEnc.getID()); |
this.putValue("DEBIT", Long.valueOf(0)); |
this.putValue("CREDIT", Long.valueOf(tva)); |
ajoutEcriture(); |
} |
} |
} |
List<Integer> pieceIDs = new ArrayList<Integer>(); |
if (source.getTable().getName().equals("ENCAISSER_MONTANT")) { |
List<SQLRow> l = source.getReferentRows(base.getTable("ENCAISSER_MONTANT_ELEMENT")); |
299,9 → 333,13 |
SQLRowValues rowVals = new SQLRowValues(tableMouvement); |
rowVals.put("IDSOURCE", row.getID()); |
rowVals.update(this.idMvt); |
if (source.getTable().getName().equalsIgnoreCase("ENCAISSER_MONTANT")) { |
source.createEmptyUpdateRow().put("ID_MOUVEMENT", this.idMvt).commit(); |
} |
} |
} |
private void setDateReglement(SQLRow source, Date d) throws SQLException { |
List<SQLRow> sources = new ArrayList<SQLRow>(); |
460,4 → 498,5 |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/generationEcritures/GenerationMvtAvoirFournisseur.java |
---|
109,12 → 109,14 |
if (rowFourn.getBoolean("UE")) { |
idCompteTVA = taxe.getForeignID("ID_COMPTE_PCE_DED_INTRA"); |
if (idCompteTVA <= 1) { |
idCompteTVA = rowPrefsCompte.getInt("ID_COMPTE_PCE_TVA_INTRA"); |
idCompteTVA = rowPrefsCompte.getInt("ID_COMPTE_PCE_TVA_ACHAT"); |
if (idCompteTVA <= 1) { |
idCompteTVA = ComptePCESQLElement.getIdComptePceDefault("TVAIntraComm"); |
idCompteTVA = ComptePCESQLElement.getIdComptePceDefault("TVADeductible"); |
} |
} |
} else { |
idCompteTVA = taxe.getForeignID("ID_COMPTE_PCE_DED"); |
if (idCompteTVA <= 1) { |
idCompteTVA = rowPrefsCompte.getInt("ID_COMPTE_PCE_TVA_ACHAT"); |
if (idCompteTVA <= 1) { |
idCompteTVA = ComptePCESQLElement.getIdComptePceDefault("TVADeductible"); |
121,6 → 123,7 |
} |
} |
} |
} |
this.putValue("ID_COMPTE_PCE", Integer.valueOf(idCompteTVA)); |
this.putValue("DEBIT", Long.valueOf(0)); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/edm/Attachment.java |
---|
29,7 → 29,7 |
private String sourceTable; |
private int sourceId; |
private int parentId; |
private boolean encrypted; |
public static final String MIMETYPE_FOLDER = "inode/directory"; |
public Attachment(SQLRowValues rowAttachment) { |
43,14 → 43,15 |
this.sourceTable = rowAttachment.getString("SOURCE_TABLE"); |
this.sourceId = rowAttachment.getInt("SOURCE_ID"); |
this.parentId = rowAttachment.getInt("ID_PARENT"); |
this.encrypted = rowAttachment.getBoolean("ENCRYPTED"); |
} |
public int getId() { |
return id; |
return this.id; |
} |
public String getName() { |
return name; |
return this.name; |
} |
public void setName(String newName) { |
58,35 → 59,35 |
} |
public String getMimeType() { |
return mimeType; |
return this.mimeType; |
} |
public String getFileName() { |
return fileName; |
return this.fileName; |
} |
public int getFileSize() { |
return fileSize; |
return this.fileSize; |
} |
public String getStorageFileName() { |
return storageFileName; |
return this.storageFileName; |
} |
public String getStoragePath() { |
return storagePath; |
return this.storagePath; |
} |
public String getSourceTable() { |
return sourceTable; |
return this.sourceTable; |
} |
public int getSourceId() { |
return sourceId; |
return this.sourceId; |
} |
public int getParentId() { |
return parentId; |
return this.parentId; |
} |
public boolean isFolder() { |
93,6 → 94,10 |
return this.mimeType.equals(MIMETYPE_FOLDER); |
} |
public boolean isEncrypted() { |
return this.encrypted; |
} |
@Override |
public String toString() { |
return super.toString() + " attachment id:" + this.getId() + " name:" + this.getName(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/edm/AttachmentPanel.java |
---|
45,6 → 45,7 |
import java.io.IOException; |
import java.sql.SQLException; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.Collections; |
import java.util.Comparator; |
import java.util.HashSet; |
65,6 → 66,7 |
public class AttachmentPanel extends JPanel { |
private final SQLRowAccessor rowSource; |
private final Collection<SQLRowAccessor> rowSecondaires; |
private List<ListDataListener> listeners = new ArrayList<>(); |
private int idParent = 1; |
74,8 → 76,14 |
private List<FilePanel> filePanels = new ArrayList<>(); |
public AttachmentPanel(SQLRowAccessor rowSource) { |
this(rowSource, Collections.emptyList()); |
} |
public AttachmentPanel(SQLRowAccessor rowSource, Collection<SQLRowAccessor> rowSecondaires) { |
super(); |
this.rowSource = rowSource; |
this.rowSecondaires = rowSecondaires; |
this.setLayout(new GridBagLayout()); |
this.parents.add(1); |
this.parentsNames.add("Racine"); |
92,13 → 100,17 |
} |
public void fireDataChanged() { |
for (ListDataListener listDataListener : listeners) { |
for (ListDataListener listDataListener : this.listeners) { |
listDataListener.contentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, 0)); |
} |
} |
public int getAttachementsSize() { |
return this.filePanels.size(); |
} |
public void initUI() { |
filePanels.clear(); |
this.filePanels.clear(); |
this.invalidate(); |
this.removeAll(); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
106,7 → 118,7 |
// Recupération de la liste des fichiers |
// TODO requete dans un SwingWorker |
final SQLTable tableAttachment = rowSource.getTable().getTable("ATTACHMENT"); |
final SQLTable tableAttachment = this.rowSource.getTable().getTable("ATTACHMENT"); |
SQLRowValues rowVals = new SQLRowValues(tableAttachment); |
rowVals.putNulls(tableAttachment.getFieldsName()); |
115,7 → 127,13 |
where = where.and(new Where(tableAttachment.getField("SOURCE_ID"), "=", this.rowSource.getID())); |
where = where.and(new Where(tableAttachment.getField("ID_PARENT"), "=", this.idParent)); |
for (SQLRowAccessor rowSecondaire : this.rowSecondaires) { |
Where whereSec = new Where(tableAttachment.getField("SOURCE_TABLE"), "=", rowSecondaire.getTable().getName()); |
whereSec = whereSec.and(new Where(tableAttachment.getField("SOURCE_ID"), "=", rowSecondaire.getID())); |
where = where.or(whereSec); |
} |
final List<SQLRowValues> rAttachments = fetcher.fetch(where); |
c.fill = GridBagConstraints.BOTH; |
c.anchor = GridBagConstraints.WEST; |
211,7 → 229,7 |
public void actionPerformed(ActionEvent e) { |
AttachmentUtils utils = new AttachmentUtils(); |
try { |
utils.createFolder("Nouveau dossier", rowSource, idParent); |
utils.createFolder("Nouveau dossier", AttachmentPanel.this.rowSource, AttachmentPanel.this.idParent); |
} catch (SQLException e1) { |
JOptionPane.showMessageDialog(null, "Impossible de créer le dossier.", "Erreur", JOptionPane.ERROR_MESSAGE); |
} |
229,12 → 247,17 |
fd.setVisible(true); |
final String fileName = fd.getFile(); |
if (fileName != null) { |
try { |
File inFile = new File(fd.getDirectory(), fileName); |
AttachmentUtils utils = new AttachmentUtils(); |
utils.uploadFile(inFile, rowSource, idParent); |
utils.uploadFile(inFile, AttachmentPanel.this.rowSource, AttachmentPanel.this.idParent); |
initUI(); |
} catch (Exception ex) { |
ex.printStackTrace(); |
JOptionPane.showMessageDialog(AttachmentPanel.this, "Erreur lors de l'ajout du fichier " + fileName + "(" + ex.getMessage() + ")"); |
} |
} |
} |
}); |
ScrollablePanel files = new ScrollablePanel() { |
350,7 → 373,6 |
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); |
Transferable t = dtde.getTransferable(); |
try { |
if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { |
@SuppressWarnings("unchecked") |
List<File> fileList = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor); |
362,10 → 384,15 |
if (cancelledByUser) { |
break; |
} |
try { |
if (!f.isDirectory()) { |
utils.uploadFile(f, rowSource, idParent); |
utils.uploadFile(f, AttachmentPanel.this.rowSource, AttachmentPanel.this.idParent); |
} |
} catch (Exception ex) { |
ex.printStackTrace(); |
JOptionPane.showMessageDialog(AttachmentPanel.this, "Erreur lors de l'ajout du fichier " + f.getAbsolutePath() + "(" + ex.getMessage() + ")"); |
} |
} |
initUI(); |
} |
} catch (Exception e) { |
379,7 → 406,7 |
} |
public Set<Attachment> getSelectedAttachments() { |
return selectedAttachments; |
return this.selectedAttachments; |
} |
public void select(Attachment a) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/edm/AttachmentUtils.java |
---|
17,10 → 17,14 |
import org.openconcerto.erp.generationDoc.DocumentLocalStorageManager; |
import org.openconcerto.erp.storage.StorageEngine; |
import org.openconcerto.erp.storage.StorageEngines; |
import org.openconcerto.sql.model.SQLInsert; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.utils.Base64; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.FileUtils; |
import org.openconcerto.utils.sync.SyncClient; |
29,22 → 33,80 |
import java.io.File; |
import java.io.FileInputStream; |
import java.io.IOException; |
import java.nio.charset.StandardCharsets; |
import java.nio.file.Files; |
import java.security.InvalidAlgorithmParameterException; |
import java.security.InvalidKeyException; |
import java.security.NoSuchAlgorithmException; |
import java.sql.SQLException; |
import java.util.List; |
import javax.crypto.BadPaddingException; |
import javax.crypto.Cipher; |
import javax.crypto.IllegalBlockSizeException; |
import javax.crypto.KeyGenerator; |
import javax.crypto.NoSuchPaddingException; |
import javax.crypto.SecretKey; |
import javax.crypto.spec.GCMParameterSpec; |
import javax.crypto.spec.SecretKeySpec; |
import javax.swing.JOptionPane; |
public class AttachmentUtils { |
public void uploadFile(File inFile, SQLRowAccessor rowSource, int idParent) { |
try { |
String generateBase64Key() throws NoSuchAlgorithmException { |
final KeyGenerator generator = KeyGenerator.getInstance("AES"); |
generator.init(16 * 8); |
final SecretKey k = generator.generateKey(); |
return Base64.encodeBytes(k.getEncoded(), Base64.DONT_BREAK_LINES); |
} |
SecretKey getSecretKey(String base64key) { |
byte[] b = Base64.decode(base64key.getBytes(StandardCharsets.UTF_8)); |
if (b.length != 16) { |
throw new IllegalStateException("key length must be 16 bytes for AES"); |
} |
return new SecretKeySpec(b, "AES"); |
} |
public byte[] encrypt(SecretKey secretKey, byte[] in) |
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { |
return process(secretKey, in, Cipher.ENCRYPT_MODE); |
} |
public byte[] decrypt(SecretKey secretKey, byte[] in) |
throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { |
return process(secretKey, in, Cipher.DECRYPT_MODE); |
} |
public byte[] process(SecretKey secretKey, byte[] in, int mode) |
throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { |
final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); |
final byte[] nonce = new byte[12]; |
final byte[] e = secretKey.getEncoded(); |
for (int i = 0; i < nonce.length; i++) { |
nonce[i] = (byte) (e[i] * e[i + 1] + e[i + 2]); |
} |
GCMParameterSpec spec = new GCMParameterSpec(16 * 8, nonce); |
cipher.init(mode, secretKey, spec); |
return cipher.doFinal(in); |
} |
public void uploadFile(File inFile, SQLRowAccessor rowSource, int idParent) throws SQLException { |
uploadFile(inFile, rowSource, idParent, null); |
} |
public void uploadFile(File inFile, SQLRowAccessor rowSource, int idParent, String nameInGed) throws SQLException { |
String encodeKey = fetchEncodedKey(rowSource.getTable().getTable("FWK_SCHEMA_METADATA")); |
// Création de la row attachment |
SQLRowValues rowValsAttachment = new SQLRowValues(rowSource.getTable().getTable("ATTACHMENT")); |
rowValsAttachment.put("SOURCE_TABLE", rowSource.getTable().getName()); |
rowValsAttachment.put("SOURCE_ID", rowSource.getID()); |
rowValsAttachment.put("ID_PARENT", idParent); |
if (encodeKey != null) { |
rowValsAttachment.put("ENCRYPTED", true); |
} |
SQLRow rowAttachment = rowValsAttachment.insert(); |
int id = rowAttachment.getID(); |
63,39 → 125,36 |
final ComptaPropsConfiguration config = ComptaPropsConfiguration.getInstanceCompta(); |
boolean isOnCloud = config.isOnCloud(); |
try { |
if (isOnCloud) { |
String remotePath = subDir; |
List<StorageEngine> engines = StorageEngines.getInstance().getActiveEngines(); |
final List<StorageEngine> engines = StorageEngines.getInstance().getActiveEngines(); |
File encodedFile = inFile; |
if (encodeKey != null) { |
encodedFile = File.createTempFile("encrypted", inFile.getName()); |
final byte[] enc = encrypt(getSecretKey(encodeKey), FileUtils.readBytes(inFile)); |
Files.write(encodedFile.toPath(), enc); |
} |
for (StorageEngine storageEngine : engines) { |
if (storageEngine.isConfigured() && storageEngine.allowAutoStorage()) { |
final String path = remotePath; |
try (FileInputStream in = new FileInputStream(inFile)) { |
try (FileInputStream in = new FileInputStream(encodedFile)) { |
storageEngine.connect(); |
final BufferedInputStream inStream = new BufferedInputStream(in); |
storageEngine.store(inStream, path, fileWithIDNAme, true); |
inStream.close(); |
storageEngine.disconnect(); |
} catch (IOException e) { |
ExceptionHandler.handle("Impossible de sauvegarder le fichier " + inFile.getAbsolutePath() + " vers " + path + "(" + storageEngine + ")", e); |
} |
// if (storageEngine instanceof CloudStorageEngine) { |
// try { |
// storageEngine.connect(); |
// final BufferedInputStream inStream = new BufferedInputStream(new |
// FileInputStream(generatedFile)); |
// storageEngine.store(inStream, path, generatedFile.getName(), true); |
// inStream.close(); |
// storageEngine.disconnect(); |
// } catch (IOException e) { |
// ExceptionHandler.handle("Impossible de sauvegarder le fichier généré " + |
// generatedFile.getAbsolutePath() + " vers " + path + "(" + storageEngine + |
// ")", e); |
// } |
// } |
} |
} |
if (encodeKey != null) { |
encodedFile.delete(); |
} |
} else { |
// Upload File |
104,9 → 163,14 |
File storagePathFile = new File(dirRoot, subDir); |
storagePathFile.mkdirs(); |
// TODO CHECK IF FILE EXISTS |
if (encodeKey == null) { |
FileUtils.copyFile(inFile, new File(storagePathFile, fileWithIDNAme)); |
} else { |
final File encodedFile = new File(storagePathFile, fileWithIDNAme); |
final byte[] enc = encrypt(getSecretKey(encodeKey), FileUtils.readBytes(inFile)); |
Files.write(encodedFile.toPath(), enc); |
} |
} |
// Update rowAttachment |
rowValsAttachment = rowAttachment.createEmptyUpdateRow(); |
113,6 → 177,9 |
// Default is without extension |
String fileName = inFile.getName(); |
if (nameInGed != null) { |
rowValsAttachment.put("NAME", nameInGed); |
} else { |
String name = fileName; |
int index = name.lastIndexOf('.'); |
if (index > 0) { |
119,8 → 186,11 |
name = name.substring(0, index); |
} |
rowValsAttachment.put("NAME", name); |
} |
rowValsAttachment.put("SOURCE_TABLE", rowSource.getTable().getName()); |
rowValsAttachment.put("SOURCE_ID", rowSource.getID()); |
rowValsAttachment.put("ID_PARENT", idParent); |
final String mimeType = Files.probeContentType(inFile.toPath()); |
rowValsAttachment.put("MIMETYPE", mimeType != null ? mimeType : "application/octet-stream"); |
rowValsAttachment.put("FILENAME", fileName); |
127,6 → 197,7 |
rowValsAttachment.put("FILESIZE", inFile.length()); |
rowValsAttachment.put("STORAGE_PATH", subDir); |
rowValsAttachment.put("STORAGE_FILENAME", fileWithIDNAme); |
rowValsAttachment.put("ENCRYPTED", (encodeKey != null)); |
// TODO THUMBNAIL |
// rowVals.put("THUMBNAIL", ); |
// rowVals.put("THUMBNAIL_WIDTH", ); |
137,11 → 208,39 |
rowValsAttachment.commit(); |
final Attachment a = new Attachment(rowValsAttachment); |
updateAttachmentsCountFromAttachment(a); |
} catch (Exception e) { |
e.printStackTrace(); |
if (rowAttachment != null) { |
config.getDirectory().getElement(AttachmentSQLElement.class).archive(rowAttachment.getID()); |
} |
ExceptionHandler.handle("Impossible de sauvegarder le fichier " + inFile.getAbsolutePath(), e); |
} |
} |
public String fetchEncodedKey(SQLTable table) { |
final SQLSelect select = new SQLSelect(); |
select.addSelect(table.getField("VALUE")); |
select.setWhere(new Where(table.getField("NAME"), "=", AttachmentSQLElement.EDM_KEY_METADATA)); |
final List<?> rows = table.getDBSystemRoot().getDataSource().executeCol(select.asString()); |
if (rows.size() == 1) { |
return rows.get(0).toString(); |
} |
return null; |
} |
public void createKeyOnDatabase(SQLTable table) throws NoSuchAlgorithmException { |
final String s = fetchEncodedKey(table); |
if (s != null) { |
throw new IllegalStateException("key alread exists"); |
} |
final SQLInsert insert = new SQLInsert(); |
insert.add(table.getField("NAME"), AttachmentSQLElement.EDM_KEY_METADATA); |
insert.add(table.getField("VALUE"), generateBase64Key()); |
table.getDBSystemRoot().getDataSource().execute(insert.asString()); |
} |
public File getFile(Attachment attachment) { |
final ComptaPropsConfiguration config = ComptaPropsConfiguration.getInstanceCompta(); |
202,6 → 301,21 |
} |
} |
final File outFile = new File(f, fileName); |
if (attachment.isEncrypted() && outFile.length() > 0) { |
try { |
final byte[] bytes = FileUtils.readBytes(outFile); |
final String encodeKey = fetchEncodedKey(config.getRootSociete().getTable("FWK_SCHEMA_METADATA")); |
if (encodeKey == null) { |
throw new IllegalStateException("missing key"); |
} |
final byte[] decrypted = decrypt(getSecretKey(encodeKey), bytes); |
Files.write(outFile.toPath(), decrypted); |
} catch (Exception e) { |
ExceptionHandler.handle("Impossible de decrypter le fichier\n" + outFile.getAbsolutePath(), e); |
return null; |
} |
} |
outFile.setReadOnly(); |
return outFile; |
208,8 → 322,12 |
} |
public void deleteFile(Attachment rowAttachment) throws SQLException, IllegalStateException { |
// Delete Row |
// Remove from DB first |
final ComptaPropsConfiguration config = ComptaPropsConfiguration.getInstanceCompta(); |
config.getDirectory().getElement(AttachmentSQLElement.class).archive(rowAttachment.getId()); |
updateAttachmentsCountFromAttachment(rowAttachment); |
final ComptaPropsConfiguration config = ComptaPropsConfiguration.getInstanceCompta(); |
if (!rowAttachment.isFolder()) { |
boolean isOnCloud = config.isOnCloud(); |
// Delete File |
237,9 → 355,7 |
} |
} |
} |
// Delete Row |
config.getDirectory().getElement(AttachmentSQLElement.class).archive(rowAttachment.getId()); |
updateAttachmentsCountFromAttachment(rowAttachment); |
} |
private void updateAttachmentsCountFromAttachment(Attachment rowAttachment) { |
299,6 → 415,10 |
final String req = "UPDATE " + attachmentTable.getSQLName().quote() + " SET " + attachmentTable.getField("ID_PARENT").getQuotedName() + "=" + folderId + " WHERE " |
+ attachmentTable.getKey().getQuotedName() + "=" + a.getId(); |
attachmentTable.getDBSystemRoot().getDataSource().execute(req); |
} |
public static void main(String[] args) throws NoSuchAlgorithmException { |
System.err.println("AttachmentUtils.main() key : " + new AttachmentUtils().generateBase64Key()); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/edm/AttachmentSQLElement.java |
---|
22,8 → 22,22 |
public class AttachmentSQLElement extends ComptaSQLConfElement { |
public static final String EDM_KEY_METADATA = "EDM_KEY"; |
public static final String DIRECTORY_PREFS = "EDMdirectory"; |
public static final String ITEM_SOURCE_TABLE = "source.table"; |
public static final String ITEM_SOURCE_ID = "source.id"; |
public static final String ITEM_NAME = "name"; |
public static final String ITEM_MIMETYPE = "mimetype"; |
public static final String ITEM_FILENAME = "filename"; |
public static final String ITEM_STORAGE_PATH = "storage.path"; |
public static final String ITEM_THUMBNAIL = "thumbnail"; |
public static final String ITEM_THUMBNAIL_WIDTH = "thumbnail.width"; |
public static final String ITEM_THUMBNAIL_HEIGHT = "thumbnail.height"; |
public static final String ITEM_TAG = "tag"; |
public static final String ITEM_PARENT = "parent.id"; |
public AttachmentSQLElement() { |
super("ATTACHMENT", "un attachement", "attachements"); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/pos/io/BarcodeReader.java |
---|
16,6 → 16,7 |
import org.openconcerto.erp.core.sales.pos.ui.BarcodeListener; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.component.ITextArea; |
import org.openconcerto.utils.StringUtils; |
import java.awt.Dimension; |
import java.awt.GridBagConstraints; |
61,16 → 62,16 |
this.timer = null; |
this.task = null; |
this.maxInterKeyDelay = maxInterKeyDelay; |
mapCharacterFR.put((int) '&', "1"); |
mapCharacterFR.put((int) 'é', "2"); |
mapCharacterFR.put((int) '"', "3"); |
mapCharacterFR.put((int) '\'', "4"); |
mapCharacterFR.put((int) '(', "5"); |
mapCharacterFR.put((int) '-', "6"); |
mapCharacterFR.put((int) 'è', "7"); |
mapCharacterFR.put((int) '_', "8"); |
mapCharacterFR.put((int) 'ç', "9"); |
mapCharacterFR.put((int) 'à', "0"); |
this.mapCharacterFR.put((int) '&', "1"); |
this.mapCharacterFR.put((int) 'é', "2"); |
this.mapCharacterFR.put((int) '"', "3"); |
this.mapCharacterFR.put((int) '\'', "4"); |
this.mapCharacterFR.put((int) '(', "5"); |
this.mapCharacterFR.put((int) '-', "6"); |
this.mapCharacterFR.put((int) 'è', "7"); |
this.mapCharacterFR.put((int) '_', "8"); |
this.mapCharacterFR.put((int) 'ç', "9"); |
this.mapCharacterFR.put((int) 'à', "0"); |
} |
public synchronized void removeBarcodeListener(BarcodeListener l) { |
102,7 → 103,7 |
// init avant que les listeners s'en servent |
this.timer = new Timer(getClass().getName(), true); |
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this); |
System.err.println("BarcodeReader start : scan delay " + maxInterKeyDelay + " ms"); |
System.err.println("BarcodeReader start : scan delay " + this.maxInterKeyDelay + " ms"); |
} |
} |
120,9 → 121,9 |
@Override |
public boolean dispatchKeyEvent(KeyEvent e) { |
if (!enable) |
if (!this.enable) { |
return false; |
} |
if (this.task != null) |
this.task.cancel(); |
133,10 → 134,10 |
int keyCode = e.getKeyCode(); |
final long delay = t - this.firstTime; |
if (keyCode == KeyEvent.VK_BACK_SPACE || keyCode == KeyEvent.VK_DELETE || (delay > maxInterKeyDelay && keyCode != KeyEvent.VK_SHIFT)) { |
if (keyCode == KeyEvent.VK_BACK_SPACE || keyCode == KeyEvent.VK_DELETE || (delay > this.maxInterKeyDelay && keyCode != KeyEvent.VK_SHIFT)) { |
// touche normale |
if (this.debug) { |
System.err.println("TOuche normale " + keyCode); |
System.err.println("Touche normale " + keyCode); |
} |
this.eve.add(e); |
redispatch(); |
151,6 → 152,11 |
if (this.debug) { |
System.err.println("SHIFT " + keyCode); |
} |
} else if (keyChar == ']') { |
this.value += keyChar; |
if (this.debug) { |
System.err.println("]"); |
} |
} else if (keyChar == '*' || keyChar == '$' || keyChar == '+' || keyChar == '/' || keyChar == '%' || keyChar == ' ') { |
this.value += keyChar; |
if (this.debug) { |
159,7 → 165,7 |
} else if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 || keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z) { |
// from KeyEvent : same as ASCII |
if (this.debug) { |
System.err.println("[0-9] [A-Z] " + keyCode); |
System.err.println("[0-9] [A-Z] " + keyCode + " : " + keyChar); |
} |
this.value += (char) keyCode; |
} else if (keyCode == KeyEvent.VK_ENTER && this.value.length() >= MIN_BARCODE_LENGTH) { |
170,20 → 176,27 |
this.value = this.value.trim(); |
fire(this.value); |
reset(); |
} else if (mapCharacterFR.containsKey((int) keyChar)) { |
} else if (this.mapCharacterFR.containsKey((int) keyChar)) { |
if (this.debug) { |
System.err.println("MAP DEFAULT FR CHAR " + keyChar + " WITH " + mapCharacterFR.get((int) keyChar)); |
System.err.println("MAP DEFAULT FR CHAR " + keyChar + " WITH " + this.mapCharacterFR.get((int) keyChar)); |
} |
this.value += mapCharacterFR.get((int) keyChar); |
this.value += this.mapCharacterFR.get((int) keyChar); |
} else if (Character.isLetter(keyChar) || Character.isDigit(keyChar)) { |
this.value += keyChar; |
if (this.debug) { |
System.err.println("LETTER OR DIGIT " + keyChar); |
} |
} else if (keyChar == 29) { |
this.value += '\u001D'; |
if (this.debug) { |
System.err.println("<GS>"); |
} |
} else if (keyChar == KeyEvent.CHAR_UNDEFINED) { |
System.err.println("CHAR_UNDEFINED"); |
} else { |
// Caractere non code barre |
if (this.debug) { |
System.err.println("CHAR NON CODE BARRE " + e); |
System.err.println("CHAR NON CODE BARRE keyCode:" + keyCode + " keyChar:" + keyChar); |
} |
redispatch(); |
} |
196,12 → 209,13 |
redispatchLater(); |
} |
}; |
this.timer.schedule(this.task, maxInterKeyDelay); |
this.timer.schedule(this.task, this.maxInterKeyDelay); |
} |
// si pas d'evenement, pas de temps associé |
assert !this.eve.isEmpty() || this.firstTime == -1; |
} |
return true; |
} |
private void redispatchLater() { |
231,7 → 245,7 |
} |
public Map<Integer, String> getMapCharacterFR() { |
return mapCharacterFR; |
return this.mapCharacterFR; |
} |
public void setDebug(boolean debug) { |
289,6 → 303,7 |
@Override |
public void barcodeRead(String code) { |
t1.append("Barcode OK : '" + code + "'\n"); |
t1.append("Hex: " + StringUtils.bytesToHexString(code.getBytes())); |
} |
}); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/pos/ui/CaisseControler.java |
---|
537,11 → 537,30 |
TicketItem item = new TicketItem(article, a.getQty().multiply(new BigDecimal(-1))); |
this.t.addItem(item); |
} |
// Annulation de chaque paiement |
final List<Paiement> typesAdded = new ArrayList<>(); |
for (Paiement p : ticket.getPaiements()) { |
final Paiement paiement = new Paiement(p.getType()); |
paiement.setMontantInCents(-1 * p.getMontantInCents()); |
this.t.addPaiement(paiement); |
typesAdded.add(p); |
} |
// On complete avec les autres types |
final List<Paiement> types = new ArrayList<>(); |
types.add(new Paiement(Paiement.CB)); |
types.add(new Paiement(Paiement.CHEQUE)); |
types.add(new Paiement(Paiement.ESPECES)); |
for (Paiement paiement : types) { |
boolean typeFound = false; |
for (Paiement p : typesAdded) { |
if (paiement.getType() == p.getType()) { |
typeFound = true; |
} |
} |
if (!typeFound) { |
this.t.addPaiement(paiement); |
} |
} |
this.caisseFrame.showCaisse(); |
fire(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/shipment/component/BonDeLivraisonSQLComponent.java |
---|
391,10 → 391,9 |
} else { |
tableBonItem.setRowCatComptable(null); |
} |
if (!isFilling()) { |
tableBonItem.setClient(rowClient, true); |
} |
tableBonItem.setClient(rowClient, !isFilling()); |
} else { |
comboContact.getRequest().setWhere(Where.FALSE); |
tableBonItem.setRowCatComptable(null); |
409,7 → 408,7 |
// Commercial |
JLabel labelCommercial = new JLabel(getLabelFor("ID_COMMERCIAL")); |
labelCommercial.setHorizontalAlignment(SwingConstants.RIGHT); |
c.fill = GridBagConstraints.HORIZONTAL; |
c.gridx++; |
c.weightx = 0; |
this.add(labelCommercial, c); |
1086,9 → 1085,17 |
private void updateStock(int id) throws SQLException { |
SQLPreferences prefs = new SQLPreferences(getTable().getDBRoot()); |
if (!prefs.getBoolean(GestionArticleGlobalPreferencePanel.STOCK_FACT, true)) { |
// Check if tr from bl or cmd pour DS |
boolean stockWithBL = !prefs.getBoolean(GestionArticleGlobalPreferencePanel.STOCK_FACT, true); |
if (getTable().getForeignTable("ID_CLIENT").contains("NOTE_2018")) { |
SQLRow row = getTable().getRow(id); |
List<SQLRow> trCmd = row.getReferentRows(getTable().getTable("TR_COMMANDE_CLIENT")); |
if (!trCmd.isEmpty()) { |
stockWithBL = true; |
} |
} |
if (stockWithBL) { |
SQLRow row = getTable().getRow(id); |
StockItemsUpdater stockUpdater = new StockItemsUpdater(new StockLabel() { |
@Override |
public String getLabel(SQLRowAccessor rowOrigin, SQLRowAccessor rowElt) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/credit/component/AvoirClientSQLComponent.java |
---|
118,8 → 118,6 |
private ElementComboBox selectContact; |
private JLabel labelCompteServ; |
private ISQLCompteSelector compteSelService; |
private static final SQLTable TABLE_PREFS_COMPTE = Configuration.getInstance().getBase().getTable("PREFS_COMPTE"); |
private static final SQLRow ROW_PREFS_COMPTE = TABLE_PREFS_COMPTE.getRow(2); |
private final boolean displayDpt; |
private final ElementComboBox comboDpt = new ElementComboBox(); |
194,10 → 192,9 |
boxTarif.setValue(foreignRow.getID()); |
} |
} |
if (!isFilling()) { |
AvoirClientSQLComponent.this.table.setClient(row, true); |
} |
AvoirClientSQLComponent.this.table.setClient(row, !isFilling()); |
} else { |
table.setRowCatComptable(null); |
selectContact.getRequest().setWhere(Where.FALSE); |
221,7 → 218,8 |
// Selection du compte de service |
int idCompteVenteService = ROW_PREFS_COMPTE.getInt("ID_COMPTE_PCE_VENTE_SERVICE"); |
final SQLRow prefs = getTable().getDBRoot().getTable("PREFS_COMPTE").getTable().getRow(2); |
int idCompteVenteService = prefs.getInt("ID_COMPTE_PCE_VENTE_SERVICE"); |
if (idCompteVenteService <= 1) { |
try { |
idCompteVenteService = ComptePCESQLElement.getIdComptePceDefault("VentesServices"); |
654,20 → 652,38 |
JLabel labelPortHT = new JLabel(getLabelFor("PORT_HT")); |
labelPortHT.setHorizontalAlignment(SwingConstants.RIGHT); |
cFrais.gridy++; |
// panelPortEtRemise.add(labelPortHT, cFrais); |
panelPortEtRemise.add(labelPortHT, cFrais); |
cFrais.gridx++; |
DefaultGridBagConstraints.lockMinimumSize(textPortHT); |
// panelPortEtRemise.add(textPortHT, cFrais); |
panelPortEtRemise.add(textPortHT, cFrais); |
JLabel labelTaxeHT = new JLabel(getLabelFor("ID_TAXE_PORT")); |
labelTaxeHT.setHorizontalAlignment(SwingConstants.RIGHT); |
cFrais.gridx = 1; |
cFrais.gridy++; |
panelPortEtRemise.add(labelTaxeHT, cFrais); |
cFrais.gridx++; |
SQLRequestComboBox boxTaxePort = new SQLRequestComboBox(false, 8); |
panelPortEtRemise.add(boxTaxePort, cFrais); |
this.addView(boxTaxePort, "ID_TAXE_PORT", REQ); |
boxTaxePort.addValueListener(new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
totalTTC.updateTotal(); |
} |
}); |
// Remise |
JLabel labelRemiseHT = new JLabel(getLabelFor("REMISE_HT")); |
labelRemiseHT.setHorizontalAlignment(SwingConstants.RIGHT); |
cFrais.gridy++; |
cFrais.gridx = 1; |
// panelPortEtRemise.add(labelRemiseHT, cFrais); |
panelPortEtRemise.add(labelRemiseHT, cFrais); |
cFrais.gridx++; |
DefaultGridBagConstraints.lockMinimumSize(textRemiseHT); |
// panelPortEtRemise.add(textRemiseHT, cFrais); |
panelPortEtRemise.add(textRemiseHT, cFrais); |
cFrais.gridy++; |
c.gridx++; |
699,7 → 715,7 |
JTextField poids = new JTextField(); |
if (getTable().getFieldsName().contains("T_POIDS")) |
addSQLObject(poids, "T_POIDS"); |
this.totalTTC = new TotalPanel(this.table, fieldEco, fieldHT, fieldTVA, fieldTTC, textPortHT, textRemiseHT, fieldService, null, fieldDevise, poids, null); |
this.totalTTC = new TotalPanel(this.table, fieldEco, fieldHT, fieldTVA, fieldTTC, textPortHT, textRemiseHT, fieldService, null, fieldDevise, poids, null, boxTaxePort, null); |
totalTTC.setOpaque(false); |
c.gridx++; |
c.gridy = 0; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/order/element/CommandeClientElementSQLElement.java |
---|
171,6 → 171,10 |
final SQLTable tableCmdElt = tableStock.getTable("COMMANDE_ELEMENT"); |
selCmdElt.addSelectStar(tableCmdElt); |
Where w = new Where(tableCmdElt.getField("RECU_FORCED"), "=", Boolean.FALSE).and(new Where(tableCmdElt.getField("RECU"), "=", Boolean.FALSE)); |
w = w.and(Where.createRaw( |
tableCmdElt.getField("QTE_RECUE").getQuotedName() + " < (" + tableCmdElt.getField("QTE").getQuotedName() + "*" + tableCmdElt.getField("QTE_UNITAIRE").getQuotedName() + ")", |
tableCmdElt.getField("QTE_UNITAIRE"), tableCmdElt.getField("QTE"), tableCmdElt.getField("QTE_RECUE"))); |
selCmdElt.setWhere(w); |
List<SQLRow> res = SQLRowListRSH.execute(selCmdElt); |
if (res != null && res.size() > 0) { |
193,6 → 197,10 |
final SQLTable tableCmdElt = tableStock.getTable("COMMANDE_CLIENT_ELEMENT"); |
selCmdElt.addSelectStar(tableCmdElt); |
Where w = new Where(tableCmdElt.getField("LIVRE_FORCED"), "=", Boolean.FALSE).and(new Where(tableCmdElt.getField("LIVRE"), "=", Boolean.FALSE)); |
w = w.and(Where.createRaw( |
tableCmdElt.getField("QTE_LIVREE").getQuotedName() + " < (" + tableCmdElt.getField("QTE").getQuotedName() + "*" + tableCmdElt.getField("QTE_UNITAIRE").getQuotedName() + ")", |
tableCmdElt.getField("QTE_UNITAIRE"), tableCmdElt.getField("QTE"), tableCmdElt.getField("QTE_LIVREE"))); |
selCmdElt.setWhere(w); |
List<SQLRow> res = SQLRowListRSH.execute(selCmdElt); |
if (res != null && res.size() > 0) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/order/element/CommandeClientSQLElement.java |
---|
52,6 → 52,7 |
import org.openconcerto.sql.request.UpdateBuilder; |
import org.openconcerto.sql.utils.SQLUtils; |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.sql.view.EditPanel; |
import org.openconcerto.sql.view.list.IListe; |
import org.openconcerto.sql.view.list.IListeAction.IListeEvent; |
import org.openconcerto.sql.view.list.RowAction; |
245,6 → 246,10 |
mouseSheetXmlListeListener.setGenerateHeader(true); |
mouseSheetXmlListeListener.setShowHeader(true); |
// Dupliquer |
RowAction cloneAction = getCloneAction(); |
allowedActions.add(cloneAction); |
allowedActions.add(bonAction); |
allowedActions.add(factureAction); |
allowedActions.add(acompteAction); |
254,6 → 259,16 |
getRowActions().addAll(allowedActions); |
} |
private boolean chiffrageEditableInUI = true; |
public void setChiffrageEditableInUI(boolean chiffrageEditableInUI) { |
this.chiffrageEditableInUI = chiffrageEditableInUI; |
} |
public boolean isChiffrageEditableInUI() { |
return this.chiffrageEditableInUI; |
} |
@Override |
protected void setupLinks(SQLElementLinksSetup links) { |
super.setupLinks(links); |
725,7 → 740,26 |
} |
} |
public RowAction getCloneAction() { |
return new RowAction(new AbstractAction() { |
public void actionPerformed(ActionEvent e) { |
SQLRowAccessor selectedRow = IListe.get(e).getSelectedRow(); |
EditFrame editFrame = new EditFrame(CommandeClientSQLElement.this, EditPanel.CREATION); |
((CommandeClientSQLComponent) editFrame.getSQLComponent()).loadCommandeExistant(selectedRow.getID()); |
editFrame.setVisible(true); |
} |
}, true, "sales.quote.clone") { |
@Override |
public boolean enabledFor(java.util.List<org.openconcerto.sql.model.SQLRowValues> selection) { |
return (selection != null && selection.size() == 1); |
} |
}; |
} |
@Override |
protected String createCode() { |
return "sales.order"; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/order/element/FacturationCommandeClientSQLElement.java |
---|
27,6 → 27,7 |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.graph.Path; |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.sql.view.EditPanelListener; |
43,6 → 44,7 |
import java.sql.SQLException; |
import java.util.ArrayList; |
import java.util.Arrays; |
import java.util.Collection; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
117,6 → 119,11 |
public void inserted(int id) { |
try { |
sel.createEmptyUpdateRow().put("ID_SAISIE_VENTE_FACTURE", id).commit(); |
SQLTable tableFacture = getForeignElement("ID_SAISIE_VENTE_FACTURE").getTable(); |
SQLRowValues rowValsFact = new SQLRowValues(tableFacture); |
rowValsFact.put(tableFacture.getKey().getName(), id); |
rowValsFact.put("ID_FACTURATION_COMMANDE_CLIENT", sel.getID()); |
rowValsFact.commit(); |
} catch (SQLException e) { |
ExceptionHandler.handle("Erreur lors de l'affectation de la facture", e); |
} |
223,7 → 230,7 |
res.init(); |
res.getColumn(getTable().getField("POURCENT")).setRenderer(new DeviseTableCellRenderer()); |
res.getColumn(getTable().getField("TYPE_FACTURE")).setRenderer(new TypeFactureCommandeCellRenderer()); |
final BaseSQLTableModelColumn pourcentFact = new BaseSQLTableModelColumn("Montant facturé", BigDecimal.class) { |
final BaseSQLTableModelColumn pourcentFact = new BaseSQLTableModelColumn("Montant à facturer", BigDecimal.class) { |
@Override |
protected Object show_(SQLRowAccessor r) { |
241,6 → 248,31 |
}; |
pourcentFact.setRenderer(new DeviseTableCellRenderer()); |
res.getColumns().add(pourcentFact); |
final BaseSQLTableModelColumn montantFact = new BaseSQLTableModelColumn("Montant facturé", BigDecimal.class) { |
@Override |
protected Object show_(SQLRowAccessor r) { |
Collection<? extends SQLRowAccessor> rows = r.getReferentRows(getForeignElement("ID_SAISIE_VENTE_FACTURE").getTable()); |
long ht = 0; |
for (SQLRowAccessor sqlRowAccessor : rows) { |
ht += sqlRowAccessor.getLong("T_TTC"); |
} |
return new BigDecimal(ht).movePointLeft(2); |
} |
@Override |
public Set<FieldPath> getPaths() { |
Path p = new Path(getTable()); |
Path p2 = p.add(p.getFirst().getField("ID_COMMANDE_CLIENT")); |
Path p3 = new Path(getTable()); |
p3 = p3.add(getTable().getForeignTable("ID_SAISIE_VENTE_FACTURE").getField("ID_FACTURATION_COMMANDE_CLIENT")); |
return CollectionUtils.createSet(new FieldPath(p, "POURCENT"), new FieldPath(p2, "T_TTC"), new FieldPath(p3, "T_TTC"), new FieldPath(p2, "T_HT"), new FieldPath(p3, "T_HT")); |
} |
}; |
montantFact.setRenderer(new DeviseTableCellRenderer()); |
res.getColumns().add(montantFact); |
super._initTableSource(res); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/order/component/CommandeClientSQLComponent.java |
---|
25,6 → 25,7 |
import org.openconcerto.erp.core.customerrelationship.customer.ui.AdresseType; |
import org.openconcerto.erp.core.customerrelationship.customer.ui.CategorieComptableChoiceUI; |
import org.openconcerto.erp.core.finance.tax.model.TaxeCache; |
import org.openconcerto.erp.core.sales.order.element.CommandeClientSQLElement; |
import org.openconcerto.erp.core.sales.order.report.CommandeClientXmlSheet; |
import org.openconcerto.erp.core.sales.order.ui.CommandeClientItemTable; |
import org.openconcerto.erp.core.sales.order.ui.EtatCommandeClient; |
62,7 → 63,6 |
import org.openconcerto.ui.TitledSeparator; |
import org.openconcerto.ui.component.ITextArea; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.text.SimpleDocumentListener; |
import java.awt.Color; |
import java.awt.GridBagConstraints; |
72,6 → 72,7 |
import java.sql.SQLException; |
import java.util.Date; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
import javax.swing.JLabel; |
256,9 → 257,7 |
// } |
// table.setTarif(foreignRow, true); |
} |
if (!isFilling()) { |
table.setClient(row, true); |
} |
table.setClient(row, !isFilling()); |
} else { |
if (!isFilling()) { |
552,8 → 551,20 |
pane.add("Facturation", this.tableFacturationItem); |
if (prefs.getBoolean(GestionCommercialeGlobalPreferencePanel.CHIFFRAGE_COMMANDE_CLIENT, false)) { |
this.tableChiffrageItem = new ChiffrageCommandeTable(this); |
this.tableChiffrageItem.getRowValuesTable().setEditable(((CommandeClientSQLElement) getElement()).isChiffrageEditableInUI()); |
pane.add("Chiffrage", this.tableChiffrageItem); |
} |
if (this.getTable().contains("INFOS_DEVIS")) { |
JPanel panelInfosDevis = new JPanel(new GridBagLayout()); |
DefaultGridBagConstraints cI = new DefaultGridBagConstraints(); |
cI.weightx = 1; |
cI.weighty = 1; |
cI.fill = GridBagConstraints.BOTH; |
ITextArea infosDevis = new ITextArea(); |
panelInfosDevis.add(new JScrollPane(infosDevis), cI); |
this.addView(infosDevis, "INFOS_DEVIS"); |
pane.add("Informations devis", panelInfosDevis); |
} |
this.add(pane, c); |
DeviseField textPortHT = new DeviseField(5); |
747,6 → 758,8 |
textPoidsTotal.setText(String.valueOf(CommandeClientSQLComponent.this.table.getPoidsTotal())); |
} |
}); |
this.addView(this.table.getRowValuesTable(), ""); |
DefaultGridBagConstraints.lockMinimumSize(comboClient); |
DefaultGridBagConstraints.lockMinimumSize(comboCommercial); |
DefaultGridBagConstraints.lockMinimumSize(comboDevis); |
1006,4 → 1019,50 |
this.table.setDateDevise(r.getDate("DATE").getTime()); |
} |
} |
/** |
* Création d'une commande à partir d'un devis existant |
* |
* @param idCommande |
* |
*/ |
public void loadCommandeExistant(final int idCommande) { |
final SQLElement commande =getElement(); |
final SQLElement commandeElt = getElement().getDirectory().getElement("COMMANDE_CLIENT_ELEMENT"); |
// On duplique la commande |
if (idCommande > 1) { |
final SQLRow row = getTable().getRow(idCommande); |
final SQLRowValues rowVals = new SQLRowValues(getTable()); |
rowVals.put("ID_CLIENT", row.getInt("ID_CLIENT")); |
if (row.getObject("ID_TARIF") != null && !row.isForeignEmpty("ID_TARIF")) { |
rowVals.put("ID_TARIF", row.getInt("ID_TARIF")); |
} |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass())); |
this.select(rowVals); |
} |
// On duplique les elements des commandes |
final List<SQLRow> myListItem = getTable().getRow(idCommande).getReferentRows(commandeElt.getTable()); |
if (myListItem.size() != 0) { |
this.table.getModel().clearRows(); |
for (final SQLRow rowElt : myListItem) { |
final SQLRowValues rowVals = rowElt.createUpdateRow(); |
rowVals.clearPrimaryKeys(); |
this.table.getModel().addRow(rowVals); |
final int rowIndex = this.table.getModel().getRowCount() - 1; |
this.table.getModel().fireTableModelModified(rowIndex); |
} |
} else { |
this.table.getModel().clearRows(); |
} |
this.table.getModel().fireTableDataChanged(); |
this.table.repaint(); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/account/VenteFactureSituationSQLComponent.java |
---|
207,9 → 207,11 |
@Override |
public void update(DocumentEvent e) { |
if (!isFilling()) { |
Acompte a = acompteField.getValue(); |
table.calculPourcentage(a, TypeCalcul.CALCUL_FACTURABLE); |
} |
} |
}; |
acompteField.getDocument().addDocumentListener(listenerAcompteField); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/component/SaisieVenteFactureSQLComponent.java |
---|
161,9 → 161,7 |
tableFacture.setRowCatComptable(null); |
} |
if (!isFilling()) { |
tableFacture.setClient(rowCli, true); |
} |
SaisieVenteFactureSQLComponent.this.tableFacture.setClient(rowCli, !isFilling()); |
if (getMode() == SQLComponent.Mode.INSERTION || !isFilling()) { |
SQLElement sqleltModeRegl = Configuration.getInstance().getDirectory().getElement("MODE_REGLEMENT"); |
301,7 → 299,7 |
public void propertyChange(PropertyChangeEvent evt) { |
if (!isFilling() && dateSaisie.getValue() != null) { |
final String nextNumero = NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, dateSaisie.getValue(), defaultNum); |
final String nextNumero = NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), dateSaisie.getValue(), defaultNum); |
if (textNumeroUnique.getText().trim().length() > 0 && !nextNumero.equalsIgnoreCase(textNumeroUnique.getText())) { |
1415,11 → 1413,10 |
rowFacture = getTable().getRow(idSaisieVF); |
// incrémentation du numéro auto |
final SQLRow rowNum = comboNumAuto == null ? this.tableNum.getRow(2) : comboNumAuto.getSelectedRow(); |
if (NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, rowFacture.getDate("DATE").getTime(), rowNum) |
.equalsIgnoreCase(this.textNumeroUnique.getText().trim())) { |
if (NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), rowFacture.getDate("DATE").getTime(), rowNum).equalsIgnoreCase(this.textNumeroUnique.getText().trim())) { |
SQLRowValues rowVals = rowNum.createEmptyUpdateRow(); |
String labelNumberFor = NumerotationAutoSQLElement.getLabelNumberFor(SaisieVenteFactureSQLElement.class); |
String labelNumberFor = NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()); |
int val = rowNum.getInt(labelNumberFor); |
val++; |
rowVals.put(labelNumberFor, Integer.valueOf(val)); |
1608,9 → 1605,9 |
SQLRowValues rowVals = new SQLRowValues(fact.getTable()); |
rowVals.put("ID_CLIENT", row.getInt("ID_CLIENT")); |
if (getTable().contains("ID_NUMEROTATION_AUTO")) { |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date(), row.getForeign("ID_NUMEROTATION_AUTO"))); |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date(), row.getForeign("ID_NUMEROTATION_AUTO"))); |
} else { |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date())); |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date())); |
} |
rowVals.put("NOM", row.getObject("NOM")); |
this.select(rowVals); |
1648,7 → 1645,7 |
SQLRowValues rowVals = new SQLRowValues(fact.getTable()); |
rowVals.put("ID_CLIENT", row.getInt("ID_CLIENT")); |
rowVals.put("ID_AFFAIRE", row.getInt("ID_AFFAIRE")); |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date())); |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date())); |
rowVals.put("NOM", "Acompte de " + GestionDevise.currencyToString(acompte) + "€"); |
this.select(rowVals); |
} |
1808,9 → 1805,9 |
final ComptaPropsConfiguration comptaPropsConfiguration = ((ComptaPropsConfiguration) Configuration.getInstance()); |
if (getTable().contains("ID_NUMEROTATION_AUTO")) { |
vals.put("ID_NUMEROTATION_AUTO", this.defaultNum.getID()); |
vals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date(), vals.getForeign("ID_NUMEROTATION_AUTO"))); |
vals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date(), vals.getForeign("ID_NUMEROTATION_AUTO"))); |
} else { |
vals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date())); |
vals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date())); |
} |
int idCompteVenteProduit = rowPrefsCompte.getInt("ID_COMPTE_PCE_VENTE_PRODUIT"); |
if (idCompteVenteProduit <= 1) { |
1852,7 → 1849,7 |
public void setDefaults() { |
this.resetValue(); |
this.textNumeroUnique.setText(NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new java.util.Date(), defaultNum)); |
this.textNumeroUnique.setText(NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new java.util.Date(), defaultNum)); |
this.tableFacture.getModel().clearRows(); |
} |
1870,7 → 1867,7 |
public void setPrevisonnelle(boolean b) { |
this.checkPrevisionnelle.setSelected(b); |
if (!b) { |
this.textNumeroUnique.setText(NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new Date())); |
this.textNumeroUnique.setText(NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date())); |
} |
} |
1916,6 → 1913,15 |
SQLPreferences prefs = SQLPreferences.getMemCached(getTable().getDBRoot()); |
if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.STOCK_FACT, true)) { |
SQLRow row = getTable().getRow(id); |
// Check if tr from bl or cmd pour DS |
if (getTable().getForeignTable("ID_CLIENT").contains("NOTE_2018")) { |
List<SQLRow> trCmd = row.getReferentRows(getTable().getTable("TR_COMMANDE_CLIENT")); |
if (!trCmd.isEmpty()) { |
return; |
} |
} |
StockItemsUpdater stockUpdater = new StockItemsUpdater(new StockLabel() { |
@Override |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/element/EcheanceClientSQLElement.java |
---|
25,6 → 25,7 |
import org.openconcerto.erp.core.finance.payment.element.EncaisserMontantSQLElement; |
import org.openconcerto.erp.core.sales.invoice.action.ImportReglementSage; |
import org.openconcerto.erp.core.sales.invoice.report.MailRelanceCreator; |
import org.openconcerto.erp.core.sales.invoice.report.SituationCompteClientPanel; |
import org.openconcerto.erp.core.sales.invoice.report.VenteFactureXmlSheet; |
import org.openconcerto.erp.rights.ComptaUserRight; |
import org.openconcerto.sql.Configuration; |
62,6 → 63,7 |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.EmailComposer; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.ui.PanelFrame; |
import org.openconcerto.ui.SwingThreadUtils; |
import org.openconcerto.utils.CollectionUtils; |
import org.openconcerto.utils.ExceptionHandler; |
213,7 → 215,18 |
}, true); |
action.setPredicate(IListeEvent.createTotalRowCountPredicate(0, Integer.MAX_VALUE)); |
getRowActions().add(action); |
PredicateRowAction actionSituation = new PredicateRowAction(new AbstractAction("Générer une situationde compte") { |
@Override |
public void actionPerformed(ActionEvent e) { |
PanelFrame frame = new PanelFrame(new SituationCompteClientPanel(ComptaPropsConfiguration.getInstanceCompta()), "Situation client"); |
frame.setVisible(true); |
} |
}, true); |
actionSituation.setPredicate(IListeEvent.createSelectionCountPredicate(0, Integer.MAX_VALUE)); |
getRowActions().add(actionSituation); |
} |
if (UserRightsManager.getCurrentUserRights().haveRight(ComptaUserRight.MENU)) { |
RowAction actionCancel = new RowAction(new AbstractAction("Annuler la régularisation en comptabilité") { |
550,6 → 563,7 |
SQLRow rowMvtSource = getTable().getTable("MOUVEMENT").getRow(idMvtSource); |
if (!rowMvtSource.getString("SOURCE").equalsIgnoreCase("SAISIE_VENTE_FACTURE")) { |
JOptionPane.showMessageDialog(null, "Impossible de relancer un échéance qui n'est pas issue d'une facture."); |
return; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/report/SituationCompteXmlSheet.java |
---|
New file |
0,0 → 1,203 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sales.invoice.report; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.generationDoc.AbstractListeSheetXml; |
import org.openconcerto.erp.preferences.PrinterNXProps; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.utils.cc.ITransformer; |
import java.math.BigDecimal; |
import java.text.DateFormat; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.Calendar; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
public class SituationCompteXmlSheet extends AbstractListeSheetXml { |
private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy"); |
private SQLElement eltEch; |
private SQLElement eltVf; |
private ComptaPropsConfiguration conf; |
public SituationCompteXmlSheet(ComptaPropsConfiguration conf, SQLRow rowClient) { |
super(rowClient); |
this.printer = PrinterNXProps.getInstance().getStringProperty("BonPrinter"); |
this.eltEch = conf.getDirectory().getElement("ECHEANCE_CLIENT"); |
this.conf = conf; |
} |
@Override |
protected String getStoragePathP() { |
return "Autres"; |
} |
public String getDefaultTemplateId() { |
return "SituationCompte"; |
} |
private Date d = null; |
@Override |
public String getName() { |
if (this.d == null) { |
this.d = new Date(); |
} |
return "SituationCompte-" + this.d.getTime(); |
} |
protected void createListeValues() { |
// On récupére les échéances en cours |
final SQLTable echTable = eltEch.getTable(); |
SQLRowValues rowVals = new SQLRowValues(echTable); |
rowVals.putNulls("DATE", "MONTANT"); |
rowVals.putRowValues("ID_SAISIE_VENTE_FACTURE").putNulls("NUMERO", "NET_A_PAYER", "DATE", "NOM"); |
Where w = new Where(echTable.getField("REGLE"), "=", Boolean.FALSE); |
w = w.and(new Where(echTable.getField("REG_COMPTA"), "=", Boolean.FALSE)); |
w = w.and(new Where(echTable.getField("ID_CLIENT"), "=", row.getID())); |
SQLRowValuesListFetcher fetcher = SQLRowValuesListFetcher.create(rowVals); |
fetcher.addSelTransf(new ITransformer<SQLSelect, SQLSelect>() { |
@Override |
public SQLSelect transformChecked(SQLSelect input) { |
input.addFieldOrder(echTable.getField("DATE")); |
return input; |
} |
}, 0); |
List<SQLRowValues> result = fetcher.fetch(w); |
List<Map<String, Object>> listValues = new ArrayList<Map<String, Object>>(); |
Map<Integer, String> styleValues = new HashMap<Integer, String>(); |
BigDecimal totalRegle = BigDecimal.ZERO; |
BigDecimal totalEch = BigDecimal.ZERO; |
BigDecimal totalEchPasse = BigDecimal.ZERO; |
Calendar today = Calendar.getInstance(); |
for (SQLRowValues sqlRow : result) { |
Map<String, Object> mValues = new HashMap<String, Object>(); |
final Calendar dateEch = sqlRow.getDate("DATE"); |
mValues.put("DATE_ECHEANCE", dateFormat.format(dateEch.getTime())); |
final BigDecimal montantDu = new BigDecimal(sqlRow.getLong("MONTANT")); |
mValues.put("DU", montantDu); |
totalEch = totalEch.add(montantDu); |
SQLRowAccessor rowFact = sqlRow.getNonEmptyForeign("ID_SAISIE_VENTE_FACTURE"); |
final BigDecimal regle; |
if (rowFact != null) { |
mValues.put("PIECE", rowFact.getString("NUMERO")); |
mValues.put("LIBELLE", rowFact.getString("NOM")); |
mValues.put("DATE", dateFormat.format(rowFact.getDate("DATE").getTime())); |
final BigDecimal montantFact = new BigDecimal(rowFact.getLong("NET_A_PAYER")); |
regle = montantFact.subtract(montantDu); |
mValues.put("DU", montantFact); |
mValues.put("REGLE", montantFact.subtract(montantDu)); |
mValues.put("SOLDE", montantDu); |
} else { |
regle = BigDecimal.ZERO; |
mValues.put("SOLDE", montantDu); |
} |
if (dateEch.before(today)) { |
totalEchPasse = totalEchPasse.add(montantDu); |
styleValues.put(listValues.size(), "Normal"); |
} else { |
styleValues.put(listValues.size(), "Titre 1"); |
} |
totalRegle = totalRegle.add(regle); |
// SQLRow rowClient = sqlRow.getForeignRow("ID_CLIENT"); |
listValues.add(mValues); |
// List<SQLRow> enc = sqlRow.getReferentRows(eltEncElt.getTable()); |
// |
// for (SQLRow sqlRow2 : enc) { |
// Map<String, Object> mValuesEnc = new HashMap<String, Object>(); |
// SQLRow rowEnc = sqlRow2.getForeignRow("ID_ENCAISSER_MONTANT"); |
// SQLRow rowMdr = rowEnc.getForeignRow("ID_MODE_REGLEMENT"); |
// mValuesEnc.put("NUMERO_FACTURE", ""); |
// mValuesEnc.put("REFERENCE", rowMdr.getString("NOM")); |
// mValuesEnc.put("DATE", dateFormat.format(rowEnc.getDate("DATE").getTime())); |
// mValuesEnc.put("NOM_CLIENT", ""); |
// mValuesEnc.put("CODE_CLIENT", ""); |
// mValuesEnc.put("TELEPHONE", ""); |
// mValuesEnc.put("MODE_REGLEMENT", |
// rowMdr.getForeignRow("ID_TYPE_REGLEMENT").getString("NOM")); |
// mValuesEnc.put("MONTANT", |
// GestionDevise.currencyToString(sqlRow2.getLong("MONTANT_REGLE"))); |
// styleValues.put(listValues.size(), "Titre 1"); |
// listValues.add(mValuesEnc); |
// |
// } |
// if (enc != null && enc.size() > 0) { |
// Map<String, Object> mValuesEnc = new HashMap<String, Object>(); |
// mValuesEnc.put("DATE", dateFormat.format(sqlRow.getDate("DATE").getTime())); |
// mValuesEnc.put("MODE_REGLEMENT", "Restant à régler"); |
// mValuesEnc.put("MONTANT", GestionDevise.currencyToString(sqlRow.getLong("MONTANT"))); |
// styleValues.put(listValues.size(), "Titre 1"); |
// listValues.add(mValuesEnc); |
// } |
} |
SQLRow rowSoc = conf.getRowSociete(); |
SQLRow adrSoc = rowSoc.getForeign("ID_ADRESSE_COMMON"); |
Map<String, Object> sheetVals = new HashMap<String, Object>(); |
sheetVals.put("TOTAL_REGLE", totalRegle); |
sheetVals.put("TOTAL_ECHEANCE", totalEch); |
sheetVals.put("TOTAL_FUTUR", totalEch.subtract(totalEchPasse)); |
sheetVals.put("TOTAL_PASSE", totalEchPasse); |
sheetVals.put("NOM_CLIENT", row.getString("NOM")); |
sheetVals.put("DATE", new Date()); |
sheetVals.put("CODE_CLIENT", row.getString("CODE")); |
sheetVals.put("TELEPHONE", row.getString("TEL")); |
SQLRow rowAdrClient = row.getForeign("ID_ADRESSE"); |
sheetVals.put("ADRESSE", rowAdrClient.getString("RUE")); |
sheetVals.put("VILLE", rowAdrClient.getString("CODE_POSTAL") + " " + rowAdrClient.getString("VILLE")); |
sheetVals.put("SOCIETE_NOM", rowSoc.getString("NOM")); |
sheetVals.put("SOCIETE_TEL", rowSoc.getString("NUM_TEL")); |
sheetVals.put("SOCIETE_SIRET", rowSoc.getString("NUM_SIRET")); |
sheetVals.put("SOCIETE_APE", rowSoc.getString("NUM_APE")); |
sheetVals.put("SOCIETE_NII", rowSoc.getString("NUM_NII")); |
sheetVals.put("SOCIETE_BIC", rowSoc.getString("BIC")); |
sheetVals.put("SOCIETE_IBAN", rowSoc.getString("IBAN")); |
sheetVals.put("SOCIETE_MAIL", rowSoc.getString("MAIL")); |
sheetVals.put("SOCIETE_ADRESSE", adrSoc.getString("RUE")); |
sheetVals.put("SOCIETE_VILLE", adrSoc.getString("CODE_POSTAL") + " " + adrSoc.getString("VILLE")); |
this.mapAllSheetValues.put(0, sheetVals); |
this.listAllSheetValues.put(0, listValues); |
this.styleAllSheetValues.put(0, styleValues); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/report/VenteFactureXmlSheet.java |
---|
23,6 → 23,7 |
public class VenteFactureXmlSheet extends AbstractSheetXMLWithDate { |
public static final String TEMPLATE_ID = "VenteFacture"; |
public static final String TEMPLATE_SITUATION_SUFFIX = "Situation"; |
public static final String TEMPLATE_PROPERTY_NAME = "LocationFacture"; |
@Override |
46,9 → 47,14 |
@Override |
public SQLRow getRowLanguage() { |
SQLRow rowClient = this.row.getForeignRow("ID_CLIENT"); |
if (rowClient.getTable().contains("ID_LANGUE")) { |
return rowClient.getForeignRow("ID_LANGUE"); |
if (!rowClient.isForeignEmpty("ID_LANGUE")) { |
return rowClient.getForeign("ID_LANGUE"); |
} else { |
return null; |
} |
} else { |
return super.getRowLanguage(); |
} |
} |
68,7 → 74,7 |
} else if (row.getBoolean("ACOMPTE")) { |
type = "Acompte"; |
} else if (row.getBoolean("PARTIAL") || row.getBoolean("SOLDE")) { |
type = "Situation"; |
type = TEMPLATE_SITUATION_SUFFIX; |
} else { |
type = null; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/report/SituationCompteClientPanel.java |
---|
New file |
0,0 → 1,118 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sales.invoice.report; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.request.ComboSQLRequest; |
import org.openconcerto.sql.sqlobject.ElementComboBox; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.EmailComposer; |
import org.openconcerto.ui.JLabelBold; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.FileUtils; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.event.ActionEvent; |
import java.beans.PropertyChangeEvent; |
import java.beans.PropertyChangeListener; |
import java.io.File; |
import javax.swing.AbstractAction; |
import javax.swing.JButton; |
import javax.swing.JCheckBox; |
import javax.swing.JPanel; |
public class SituationCompteClientPanel extends JPanel { |
public SituationCompteClientPanel(ComptaPropsConfiguration conf) { |
super(new GridBagLayout()); |
JLabelBold title = new JLabelBold("Génération d'une situation de compte d'un client"); |
final ElementComboBox box = new ElementComboBox(true); |
SQLElement element = Configuration.getInstance().getDirectory().getElement("CLIENT"); |
ComboSQLRequest comboRequest = element.getComboRequest(true); |
// comboRequest.setUndefLabel("Tous"); |
box.init(element, comboRequest); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
c.gridwidth = 1; |
c.weightx = 0; |
this.add(title, c); |
c.gridx++; |
c.gridwidth = 1; |
c.weightx = 1; |
this.add(box, c); |
final JCheckBox boxMail = new JCheckBox("Envoie par mail"); |
c.gridx++; |
c.weightx = 0; |
this.add(boxMail, c); |
final JButton buttonValid = new JButton(new AbstractAction("Valider") { |
@Override |
public void actionPerformed(ActionEvent e) { |
final SQLRow selectedClient = box.getSelectedRow(); |
new Thread() { |
public void run() { |
try { |
SituationCompteXmlSheet sheet = new SituationCompteXmlSheet(conf, selectedClient); |
File pdf = sheet.getOrCreatePDFDocumentFile(true); |
if (boxMail.isSelected()) { |
sheet.createDocument(); |
// sheet.showPrintAndExport(false, false, false); |
String mail = selectedClient.getString("MAIL"); |
try { |
EmailComposer.getInstance().compose(mail, "", "", pdf); |
} catch (Exception exn) { |
ExceptionHandler.handle(null, "Impossible de créer le courriel", exn); |
} |
} else { |
FileUtils.openFile(pdf); |
} |
} catch (Exception e) { |
ExceptionHandler.handle("Une erreur est survenue lors de la création du document", e); |
} |
}; |
}.start(); |
} |
}); |
c.gridy++; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.EAST; |
c.weightx = 0; |
this.add(buttonValid, c); |
// Listener enabled/disabled button |
buttonValid.setEnabled(false); |
box.addModelListener("wantedID", new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent arg0) { |
buttonValid.setEnabled(box.getWantedID() != SQLRow.NONEXISTANT_ID && box.getWantedID() != box.getRequest().getPrimaryTable().getUndefinedID()); |
} |
}); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/report/ReportingStockXmlSheet.java |
---|
13,8 → 13,9 |
package org.openconcerto.erp.core.sales.invoice.report; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.supplychain.stock.element.DepotStockSQLElement; |
import org.openconcerto.erp.generationDoc.AbstractListeSheetXml; |
import org.openconcerto.erp.preferences.PrinterNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
23,11 → 24,15 |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.TableRef; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.utils.cc.ITransformer; |
import java.math.BigDecimal; |
import java.text.DateFormat; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.Collections; |
import java.util.Comparator; |
import java.util.Date; |
42,16 → 47,20 |
public static final String TEMPLATE_ID = "EtatStocks"; |
public static final String TEMPLATE_PROPERTY_NAME = DEFAULT_PROPERTY_NAME; |
private int intIDDepot = DepotStockSQLElement.DEFAULT_ID; |
private boolean bTousLesDepots = false; |
private Date date; |
private SQLElement eltArticle = Configuration.getInstance().getDirectory().getElement("ARTICLE"); |
private SQLElement eltStock = Configuration.getInstance().getDirectory().getElement("STOCK"); |
public ReportingStockXmlSheet(boolean fournisseur) { |
super(); |
this.printer = PrinterNXProps.getInstance().getStringProperty("BonPrinter"); |
public ReportingStockXmlSheet(ComptaPropsConfiguration conf, Integer intIDDepot, boolean bTousLesDepots) { |
this.eltArticle = conf.getDirectory().getElement("ARTICLE"); |
this.eltStock = conf.getDirectory().getElement("STOCK"); |
if (intIDDepot != null) { |
this.intIDDepot = intIDDepot; |
} |
this.bTousLesDepots = bTousLesDepots; |
} |
@Override |
public String getStoragePathP() { |
73,17 → 82,33 |
protected void createListeValues() { |
final SQLTable tableArt = eltArticle.getTable(); |
SQLRowValues rowVals = new SQLRowValues(tableArt); |
rowVals.put("ID_FOURNISSEUR", null); |
rowVals.put("ID_FAMILLE_ARTICLE", null); |
rowVals.put("CODE", null); |
rowVals.put("NOM", null); |
rowVals.put("PA_HT", null); |
rowVals.put("PV_HT", null); |
rowVals.putRowValues("ID_STOCK").putNulls("QTE_REEL"); |
final SQLTable tableArt = this.eltArticle.getTable(); |
SQLRowValues rowvArticle = new SQLRowValues(tableArt); |
rowvArticle.put("ID_FOURNISSEUR", null); |
rowvArticle.put("ID_FAMILLE_ARTICLE", null); |
rowvArticle.put("CODE", null); |
rowvArticle.put("NOM", null); |
rowvArticle.put("PA_HT", null); |
rowvArticle.put("PV_HT", null); |
SQLRowValuesListFetcher fetch = SQLRowValuesListFetcher.create(rowVals); |
SQLRowValues rowvStock = new SQLRowValues(this.eltStock.getTable()); |
rowvStock.put("QTE_REEL", null).put("ID_ARTICLE", rowvArticle); |
SQLRowValuesListFetcher fetch = SQLRowValuesListFetcher.create(rowvArticle); |
if (!this.bTousLesDepots) { |
fetch.setSelTransf(new ITransformer<SQLSelect, SQLSelect>() { |
@Override |
public SQLSelect transformChecked(SQLSelect input) { |
TableRef join = input.getAlias(ReportingStockXmlSheet.this.eltArticle.getTable().getTable("STOCK")); |
input.setWhere(new Where(join.getField("ID_DEPOT_STOCK"), "=", ReportingStockXmlSheet.this.intIDDepot)); |
System.out.println(input.toString()); |
return input; |
} |
}); |
} |
List<SQLRowValues> values = fetch.fetch(); |
final SQLTable tableF = tableArt.getTable("FAMILLE_ARTICLE"); |
119,7 → 144,11 |
Line lineTotal = new Line("Total", "", BigDecimal.ZERO, 0F); |
final HashMap<Integer, String> style = new HashMap<Integer, String>(); |
for (SQLRowValues vals : values) { |
Float qte = vals.getForeign("ID_STOCK").getFloat("QTE_REEL"); |
Collection<SQLRowValues> stocks = vals.getReferentRows(this.eltStock.getTable()); |
Float qte = 0f; |
for (SQLRowValues stock : stocks) { |
qte += stock.getFloat("QTE_REEL"); |
} |
BigDecimal ha = BigDecimal.ZERO; |
if (qte > 0) { |
final BigDecimal puHA = vals.getBigDecimal("PA_HT"); |
213,7 → 242,7 |
style.put(style.keySet().size(), "Titre 1"); |
final Map<String, Object> valuesSheet = new HashMap<String, Object>(); |
valuesSheet.put("DATE", "Au " + dateFormat.format(new Date())); |
valuesSheet.put("DATE", "Au " + this.dateFormat.format(new Date())); |
// |
this.listAllSheetValues.put(0, listValues); |
239,23 → 268,23 |
} |
public Float getQte() { |
return qte; |
return this.qte; |
} |
public String getCodeArt() { |
return codeArt; |
return this.codeArt; |
} |
public BigDecimal getPuHA() { |
return puHA; |
return this.puHA; |
} |
public String getNomArt() { |
return nomArt; |
return this.nomArt; |
} |
public BigDecimal getTotalHA() { |
return totalHA; |
return this.totalHA; |
} |
public void add(Line l) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/action/ImportReglementSage.java |
---|
170,7 → 170,7 |
SQLRow rowEncaisser = rowValsEncaisser.commit(); |
this.encaisserSQLElement.regleFacture(rowEncaisser); |
this.encaisserSQLElement.regleFacture(rowEncaisser, null, false); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/action/GenEtatStockAction.java |
---|
13,11 → 13,19 |
package org.openconcerto.erp.core.sales.invoice.action; |
import org.openconcerto.erp.core.sales.invoice.report.ReportingStockXmlSheet; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.sales.invoice.ui.RapportEtatDeStockDepotSelectionPanel; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.ui.FrameUtil; |
import org.openconcerto.ui.state.WindowStateManager; |
import org.openconcerto.utils.FileUtils; |
import java.awt.Dimension; |
import java.io.File; |
import javax.swing.AbstractAction; |
import javax.swing.Action; |
import javax.swing.JFrame; |
public class GenEtatStockAction extends AbstractAction { |
public GenEtatStockAction() { |
27,17 → 35,23 |
public void actionPerformed(java.awt.event.ActionEvent e) { |
final Thread thread = new Thread(new Runnable() { |
public void run() { |
try { |
ReportingStockXmlSheet sheet = new ReportingStockXmlSheet(false); |
// Création de la fenêtre de popup de séléction du dépot. |
JFrame frame = new JFrame(); |
frame.setTitle("Sélection des dépôts."); |
frame.setPreferredSize(new Dimension(500, 130)); |
frame.setLocationRelativeTo(null); // la fenêtre est centrée à l'écran |
sheet.createDocumentAsynchronous().get(); |
sheet.openDocument(false); |
WindowStateManager stateManager; |
stateManager = new WindowStateManager(frame, |
new File(Configuration.getInstance().getConfDir(), "Configuration" + File.separator + "Frame" + File.separator + FileUtils.sanitize("RapportEtatDeStockPanel") + ".xml")); |
} catch (Exception e) { |
ExceptionHandler.handle("Erreur de traitement", e); |
frame.getContentPane().add(new RapportEtatDeStockDepotSelectionPanel((ComptaPropsConfiguration) Configuration.getInstance())); |
FrameUtil.showPacked(frame); |
stateManager.loadState(); |
} |
} |
}); |
thread.start(); |
}; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/ui/RapportEtatDeStockDepotSelectionPanel.java |
---|
New file |
0,0 → 1,152 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sales.invoice.ui; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.sales.invoice.report.ReportingStockXmlSheet; |
import org.openconcerto.erp.core.supplychain.stock.element.DepotStockSQLElement; |
import org.openconcerto.sql.request.ComboSQLRequest; |
import org.openconcerto.sql.sqlobject.SQLRequestComboBox; |
import org.openconcerto.ui.component.InteractionMode; |
import org.openconcerto.utils.ExceptionHandler; |
import java.awt.Color; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.Insets; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import java.util.ArrayList; |
import java.util.List; |
import javax.swing.JButton; |
import javax.swing.JCheckBox; |
import javax.swing.JLabel; |
import javax.swing.JPanel; |
import javax.swing.SwingConstants; |
public class RapportEtatDeStockDepotSelectionPanel extends JPanel { |
JPanel pnlMain = new JPanel(); |
JPanel pnlBottom = new JPanel(); |
JLabel labDepots = new JLabel("Dépôts"); |
JButton butReport = new JButton("Générer le rapport"); |
JCheckBox chkTous = new JCheckBox("Séléctionner tous les dépôts"); |
SQLRequestComboBox sqlreqDepots = new SQLRequestComboBox(false, 20); |
public RapportEtatDeStockDepotSelectionPanel(ComptaPropsConfiguration conf) { |
GridBagLayout layThis = new GridBagLayout(); |
this.setLayout(layThis); |
GridBagLayout layMain = new GridBagLayout(); |
this.pnlMain.setLayout(layMain); |
GridBagLayout layBottom = new GridBagLayout(); |
this.pnlBottom.setLayout(layBottom); |
GridBagConstraints gbcThis = new GridBagConstraints(); |
gbcThis.weightx = 1; |
gbcThis.weighty = 1; |
gbcThis.gridheight = 1; |
gbcThis.gridwidth = 1; |
gbcThis.fill = GridBagConstraints.BOTH; |
GridBagConstraints gbcBottom = new GridBagConstraints(); |
gbcBottom.weightx = 1; |
gbcBottom.weighty = 1; |
gbcBottom.gridheight = 1; |
gbcBottom.gridwidth = 2; |
gbcBottom.fill = GridBagConstraints.BOTH; |
GridBagConstraints gbcDefault = new GridBagConstraints(); |
gbcDefault.weightx = 1; |
gbcDefault.gridheight = 1; |
gbcDefault.gridwidth = 1; |
gbcDefault.insets = new Insets(0, 4, 4, 4); |
gbcDefault.fill = GridBagConstraints.HORIZONTAL; |
GridBagConstraints gbcButton = new GridBagConstraints(); |
gbcButton.weightx = 1; |
gbcButton.weighty = 1; |
gbcButton.gridheight = 1; |
gbcButton.gridwidth = 1; |
gbcButton.insets = new Insets(0, 4, 4, 4); |
gbcButton.anchor = GridBagConstraints.SOUTHEAST; |
this.setBackground(Color.DARK_GRAY); |
this.add(this.pnlMain, gbcThis); |
// Label. |
gbcDefault.gridx = 0; |
gbcDefault.gridy = 0; |
this.pnlMain.add(this.labDepots, gbcDefault); |
this.labDepots.setHorizontalAlignment(SwingConstants.RIGHT); |
// SQLRequestComboBox. |
List<String> fields = new ArrayList<>(); |
fields.add("NOM"); |
ComboSQLRequest request = new ComboSQLRequest(conf.getDirectory().getElement("DEPOT_STOCK").getTable(), fields, null, conf.getDirectory()); |
gbcDefault.gridx = 1; |
gbcDefault.gridy = 0; |
this.sqlreqDepots.uiInit(request); |
this.sqlreqDepots.setValue(DepotStockSQLElement.DEFAULT_ID); |
this.pnlMain.add(this.sqlreqDepots, gbcDefault); |
// CheckBox. |
gbcDefault.gridx = 1; |
gbcDefault.gridy = 1; |
this.chkTous.addActionListener(new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) { |
if (RapportEtatDeStockDepotSelectionPanel.this.chkTous.isSelected()) { |
RapportEtatDeStockDepotSelectionPanel.this.sqlreqDepots.setEnabled(InteractionMode.DISABLED); |
} else { |
RapportEtatDeStockDepotSelectionPanel.this.sqlreqDepots.setEnabled(InteractionMode.READ_WRITE); |
} |
} |
}); |
this.pnlMain.add(this.chkTous, gbcDefault); |
// Ajout du panel du bas. |
gbcBottom.gridx = 0; |
gbcBottom.gridy = 2; |
this.pnlMain.add(this.pnlBottom, gbcBottom); |
// Button. |
gbcButton.gridx = 0; |
gbcButton.gridy = 0; |
this.butReport.addActionListener(new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) { |
Integer intIDDepot = RapportEtatDeStockDepotSelectionPanel.this.sqlreqDepots.getValue(); |
boolean bTousLesDepots = RapportEtatDeStockDepotSelectionPanel.this.chkTous.isSelected(); |
try { |
ReportingStockXmlSheet sheet = new ReportingStockXmlSheet(conf, intIDDepot, bTousLesDepots); |
sheet.createDocumentAsynchronous().get(); |
sheet.openDocument(false); |
} catch (Exception excep) { |
ExceptionHandler.handle("Erreur de traitement", excep); |
} |
} |
}); |
this.pnlBottom.add(this.butReport, gbcButton); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/invoice/ui/ListeDesEcheancesClientsPanel.java |
---|
54,7 → 54,6 |
public class ListeDesEcheancesClientsPanel extends JPanel { |
private ListPanelEcheancesClients panelEcheances; |
private EditFrame editEncaisse = null; |
private EditFrame editRelance = null; |
private JButton relancer; |
private JButton encaisser; |
192,10 → 191,7 |
} |
SQLElement encaisseElt = Configuration.getInstance().getDirectory().getElement("ENCAISSER_MONTANT"); |
if (ListeDesEcheancesClientsPanel.this.editEncaisse == null) { |
ListeDesEcheancesClientsPanel.this.editEncaisse = new EditFrame(encaisseElt); |
ListeDesEcheancesClientsPanel.this.editEncaisse.setIconImages(Gestion.getFrameIcon()); |
} |
EditFrame editEncaisse = new EditFrame(encaisseElt); |
SQLRowValues rowVals = new SQLRowValues(encaisseElt.getTable()); |
if (idClient > -1) { |
207,60 → 203,23 |
rowVals.put("ID_COMPTE_PCE_TIERS", idCptTiers); |
} |
final EncaisserMontantSQLComponent sqlComponent = (EncaisserMontantSQLComponent) ListeDesEcheancesClientsPanel.this.editEncaisse.getSQLComponent(); |
final EncaisserMontantSQLComponent sqlComponent = (EncaisserMontantSQLComponent) editEncaisse.getSQLComponent(); |
sqlComponent.resetValue(); |
sqlComponent.select(rowVals); |
sqlComponent.loadEcheancesFromRows(selectedRows); |
ListeDesEcheancesClientsPanel.this.editEncaisse.setTitle("Encaissement de factures clients"); |
ListeDesEcheancesClientsPanel.this.editEncaisse.pack(); |
ListeDesEcheancesClientsPanel.this.editEncaisse.setVisible(true); |
editEncaisse.setTitle("Encaissement de factures clients"); |
editEncaisse.pack(); |
editEncaisse.setVisible(true); |
} |
}); |
// Gestion de la souris |
this.panelEcheances.getJTable().addMouseListener(new MouseAdapter() { |
@Override |
public void mousePressed(MouseEvent mE) { |
if (mE.getButton() == MouseEvent.BUTTON1) { |
// Mise à jour de l'echeance sur la frame de reglement |
// si cette derniere est cree |
final SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
final SQLRowValues selectedRow = panelEcheances.getListe().getSelectedRow(); |
final SQLRow row = selectedRow.asRow(); |
if (row == null) { |
JOptionPane.showMessageDialog(ListeDesEcheancesClientsPanel.this, "Selection", "Merci de sélectionner une ligne", JOptionPane.PLAIN_MESSAGE); |
return; |
} |
if (ListeDesEcheancesClientsPanel.this.editEncaisse != null) { |
final SQLRowValues rowVals = new SQLRowValues(base.getTable("ENCAISSER_MONTANT")); |
rowVals.put("ID_ECHEANCE_CLIENT", row.getID()); |
ListeDesEcheancesClientsPanel.this.editEncaisse.getSQLComponent().select(rowVals); |
ListeDesEcheancesClientsPanel.this.editEncaisse.pack(); |
} |
} |
} |
}); |
liste.addIListener(new IListener() { |
public void selectionId(int id, int field) { |
if (id > 1) { |
final SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
final SQLTable tableEch = base.getTable("ECHEANCE_CLIENT"); |
final SQLRow rowEch = tableEch.getRow(id); |
final int idMvtSource = MouvementSQLElement.getSourceId(rowEch.getInt("ID_MOUVEMENT")); |
final SQLRow rowMvtSource = base.getTable("MOUVEMENT").getRow(idMvtSource); |
ListeDesEcheancesClientsPanel.this.relancer.setEnabled(rowMvtSource.getString("SOURCE").equalsIgnoreCase("SAISIE_VENTE_FACTURE")); |
ListeDesEcheancesClientsPanel.this.encaisser.setEnabled(true); |
} else { |
ListeDesEcheancesClientsPanel.this.relancer.setEnabled(false); |
ListeDesEcheancesClientsPanel.this.encaisser.setEnabled(false); |
ListeDesEcheancesClientsPanel.this.relancer.setEnabled(id > 1); |
ListeDesEcheancesClientsPanel.this.encaisser.setEnabled(id > 1); |
} |
} |
}); |
this.relancer.setEnabled(false); |
this.encaisser.setEnabled(false); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/quote/component/DevisSQLComponent.java |
---|
436,10 → 436,9 |
final SQLRow rowClient = getTable().getForeignTable("ID_CLIENT").getRow(wantedID); |
int idClient = rowClient.getID(); |
comboContact.getRequest().setWhere(new Where(contactElement.getTable().getField("ID_CLIENT"), "=", idClient)); |
if (!isFilling()) { |
table.setClient(rowClient, true); |
} |
table.setClient(rowClient, !isFilling()); |
} else { |
comboContact.getRequest().setWhere(Where.FALSE); |
if (!isFilling()) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/action/TransfertStockPanel.java |
---|
20,7 → 20,9 |
import org.openconcerto.erp.core.supplychain.stock.element.StockItem.TypeStockMouvement; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.ConnectionHandlerNoSetup; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLDataSource; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
81,7 → 83,6 |
final SQLRequestComboBox comboStockArrive = new SQLRequestComboBox(); |
comboStockArrive.uiInit(stockElt.createComboRequest()); |
JLabel qteReel = new JLabel("Quantité", SwingConstants.RIGHT); |
final NumericTextField fieldReel = new NumericTextField(); |
fieldReel.getDocument().addDocumentListener(new SimpleDocumentListener() { |
88,8 → 89,7 |
@Override |
public void update(DocumentEvent e) { |
buttonUpdate.setEnabled( |
fieldReel.getText().trim().length() > 0 && comboArticle.getSelectedRow() != null && comboStockArrive.getSelectedRow() != null && comboStockDepart.getSelectedRow() != null); |
updateButtons(buttonUpdate, comboArticle, comboStockDepart, comboStockArrive, fieldReel); |
} |
}); |
97,8 → 97,7 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
buttonUpdate.setEnabled( |
fieldReel.getText().trim().length() > 0 && comboArticle.getSelectedRow() != null && comboStockArrive.getSelectedRow() != null && comboStockDepart.getSelectedRow() != null); |
updateButtons(buttonUpdate, comboArticle, comboStockDepart, comboStockArrive, fieldReel); |
} |
}); |
106,8 → 105,7 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
buttonUpdate.setEnabled( |
fieldReel.getText().trim().length() > 0 && comboArticle.getSelectedRow() != null && comboStockArrive.getSelectedRow() != null && comboStockDepart.getSelectedRow() != null); |
updateButtons(buttonUpdate, comboArticle, comboStockDepart, comboStockArrive, fieldReel); |
} |
}); |
115,17 → 113,16 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
buttonUpdate.setEnabled( |
fieldReel.getText().trim().length() > 0 && comboArticle.getSelectedRow() != null && comboStockArrive.getSelectedRow() != null && comboStockDepart.getSelectedRow() != null); |
updateButtons(buttonUpdate, comboArticle, comboStockDepart, comboStockArrive, fieldReel); |
} |
}); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
c.gridx = 0; |
this.add(new JLabel("Intitulé"), c); |
final JTextField label = new JTextField(); |
c.gridx++; |
c.gridwidth = 2; |
c.gridwidth = 1; |
c.weightx = 1; |
this.add(label, c); |
label.setText(defaultLabel); |
132,72 → 129,49 |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 1; |
c.weightx = 0; |
this.add(new JLabel("Date", SwingConstants.RIGHT), c); |
final JDate date = new JDate(true); |
c.gridx++; |
c.weightx = 0; |
this.add(date, c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
this.add(new JLabel("Article", SwingConstants.RIGHT), c); |
c.gridx += 2; |
c.gridwidth = 1; |
c.weightx = 1; |
c.gridx++; |
this.add(comboArticle, c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
this.add(new JLabel("Départ", SwingConstants.RIGHT), c); |
c.gridx += 2; |
c.gridwidth = 1; |
c.weightx = 1; |
c.gridx++; |
this.add(comboStockDepart, c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
this.add(new JLabel("Arrivée", SwingConstants.RIGHT), c); |
c.gridx += 2; |
c.gridwidth = 1; |
c.weightx = 1; |
c.gridx++; |
this.add(comboStockArrive, c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
this.add(qteReel, c); |
c.gridx += 2; |
c.gridwidth = 1; |
c.weightx = 1; |
this.add(new JLabel("Quantité", SwingConstants.RIGHT), c); |
c.gridx++; |
this.add(fieldReel, c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
this.add(qteReel, c); |
c.gridx += 2; |
c.gridwidth = 1; |
c.weightx = 1; |
this.add(fieldReel, c); |
c.gridy++; |
c.gridx = 0; |
JButton buttonCancel = new JButton("Annuler"); |
JPanel pButton = new JPanel(); |
pButton.add(buttonCancel); |
pButton.add(buttonUpdate); |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.anchor = GridBagConstraints.EAST; |
c.gridwidth = 2; |
c.anchor = GridBagConstraints.SOUTHEAST; |
c.weightx = 0; |
c.fill = GridBagConstraints.NONE; |
this.add(pButton, c); |
212,19 → 186,19 |
@Override |
public void actionPerformed(ActionEvent e) { |
buttonUpdate.setEnabled(false); |
BigDecimal qteReel = fieldReel.getValue(); |
List<String> multipleRequestsHundred = new ArrayList<String>(100); |
boolean usePrice = mvtStockTable.contains("PRICE"); |
List<StockItem> stockItems = new ArrayList<StockItem>(); |
final Date dateValue = date.getValue(); |
final SQLRow selectedRowArticle = comboArticle.getSelectedRow(); |
final SQLRow selectedRowDepotDepart = comboStockDepart.getSelectedRow(); |
final SQLRow selectedRowDepotArrivee = comboStockArrive.getSelectedRow(); |
try { |
SQLUtils.executeAtomic(selectedRowDepotDepart.getTable().getDBSystemRoot().getDataSource(), new ConnectionHandlerNoSetup<Object, SQLException>() { |
@Override |
public Object handle(SQLDataSource ds) throws SQLException { |
{ |
// DEPART |
final SQLRowAccessor rowStockDepart = ProductComponent.findOrCreateStock(selectedRowArticle, selectedRowDepotDepart); |
233,12 → 207,7 |
SQLRowValues rowVals = new SQLRowValues(mvtStockTable.getTable("STOCK")); |
rowVals.put("ID_ARTICLE", selectedRowArticle.getID()); |
rowVals.put("ID_DEPOT_STOCK", selectedRowDepotDepart.getID()); |
try { |
rowVals.commit(); |
} catch (SQLException e1) { |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
selectedRowArticle.fetchValues(); |
item = new StockItem(selectedRowArticle, rowStockDepart); |
} |
245,28 → 214,22 |
stockItems.add(item); |
double diff = -qteReel.doubleValue(); |
item.updateQty(diff, TypeStockMouvement.REEL); |
multipleRequestsHundred.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), true, usePrice)); |
multipleRequestsHundred |
.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), true, usePrice)); |
item.updateQty(diff, TypeStockMouvement.THEORIQUE); |
multipleRequestsHundred.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), false, usePrice)); |
multipleRequestsHundred |
.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), false, usePrice)); |
multipleRequestsHundred.add(item.getUpdateRequest()); |
} |
// ARRIVEE |
{ |
final SQLRowAccessor rowStockArrivee = ProductComponent.findOrCreateStock(selectedRowArticle, selectedRowDepotArrivee); |
StockItem item = new StockItem(selectedRowArticle, rowStockArrivee); |
if (!item.isStockInit()) { |
SQLRowValues rowVals = new SQLRowValues(mvtStockTable.getTable("STOCK")); |
rowVals.put("ID_ARTICLE", selectedRowArticle.getID()); |
rowVals.put("ID_DEPOT_STOCK", selectedRowDepotArrivee.getID()); |
try { |
rowVals.commit(); |
} catch (SQLException e1) { |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
selectedRowArticle.fetchValues(); |
item = new StockItem(selectedRowArticle, rowStockArrivee); |
} |
273,16 → 236,14 |
stockItems.add(item); |
double diff = qteReel.doubleValue(); |
item.updateQty(diff, TypeStockMouvement.REEL); |
multipleRequestsHundred.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), true, usePrice)); |
multipleRequestsHundred |
.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), true, usePrice)); |
item.updateQty(diff, TypeStockMouvement.THEORIQUE); |
multipleRequestsHundred.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), false, usePrice)); |
multipleRequestsHundred |
.add(getMvtRequest(dateValue, BigDecimal.ZERO, diff, item, getLabel(label.getText(), selectedRowDepotDepart, selectedRowDepotArrivee), false, usePrice)); |
multipleRequestsHundred.add(item.getUpdateRequest()); |
} |
try { |
final int size = multipleRequestsHundred.size(); |
List<? extends ResultSetHandler> handlers = new ArrayList<ResultSetHandler>(size); |
for (int i = 0; i < size; i++) { |
290,28 → 251,18 |
} |
SQLUtils.executeMultiple(instance.getRoot().getDBSystemRoot(), multipleRequestsHundred, handlers); |
} catch (SQLException e1) { |
ExceptionHandler.handle("Stock update error", e1); |
} |
final DBRoot root = mvtStockTable.getDBRoot(); |
if (root.contains("ARTICLE_ELEMENT")) { |
// List<StockItem> stockItems = new ArrayList<StockItem>(); |
// for (SQLRowAccessor sqlRowAccessor2 : stocks) { |
// final SQLRow asRow = sqlRowAccessor2.asRow(); |
// asRow.fetchValues(); |
// stockItems.add(new StockItem(asRow)); |
// } |
// Mise à jour des stocks des nomenclatures |
ComposedItemStockUpdater comp = new ComposedItemStockUpdater(root, stockItems); |
try { |
comp.update(); |
} |
return null; |
} |
}); |
} catch (SQLException e1) { |
e1.printStackTrace(); |
ExceptionHandler.handle("Stock update error", e1); |
} |
} |
// liste.getModel().updateAll(); |
((JFrame) SwingUtilities.getRoot(TransfertStockPanel.this)).dispose(); |
} |
}); |
318,14 → 269,12 |
} |
private String getLabel(String label, SQLRowAccessor fromDepot, SQLRowAccessor toDepot) { |
return label + " de " + fromDepot.getString("NOM") + " vers " + toDepot.getString("NOM"); |
} |
private String getMvtRequest(Date time, BigDecimal prc, double qteFinal, StockItem item, String label, boolean reel, boolean usePrice) { |
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
String mvtStockQuery = "INSERT INTO " + mvtStockTableQuoted + " (\"QTE\",\"DATE\",\"ID_ARTICLE\",\"ID_STOCK\",\"NOM\",\"REEL\",\"ORDRE\""; |
String mvtStockQuery = "INSERT INTO " + this.mvtStockTableQuoted + " (\"QTE\",\"DATE\",\"ID_ARTICLE\",\"ID_STOCK\",\"NOM\",\"REEL\",\"ORDRE\""; |
if (usePrice && prc != null) { |
mvtStockQuery += ",\"PRICE\""; |
332,7 → 281,7 |
} |
mvtStockQuery += ") VALUES(" + qteFinal + ",'" + dateFormat.format(time) + "'," + item.getArticle().getID() + "," + item.stock.getID() + ",'" + label + "'," + reel |
+ ", (SELECT (MAX(\"ORDRE\")+1) FROM " + mvtStockTableQuoted + ")"; |
+ ", (SELECT (MAX(\"ORDRE\")+1) FROM " + this.mvtStockTableQuoted + ")"; |
if (usePrice && prc != null) { |
mvtStockQuery += "," + prc.setScale(6, RoundingMode.HALF_UP).toString(); |
} |
339,4 → 288,10 |
mvtStockQuery += ")"; |
return mvtStockQuery; |
} |
private void updateButtons(final JButton buttonUpdate, final SQLRequestComboBox comboArticle, final SQLRequestComboBox comboStockDepart, final SQLRequestComboBox comboStockArrive, |
final NumericTextField fieldReel) { |
buttonUpdate.setEnabled(fieldReel.getText().trim().length() > 0 && comboArticle.getSelectedRow() != null && comboStockArrive.getSelectedRow() != null |
&& comboStockDepart.getSelectedRow() != null && comboStockArrive.getSelectedRow().getID() != comboStockDepart.getSelectedRow().getID()); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/ui/CustomerProductFamilyQtyPriceListTable.java |
---|
New file |
0,0 → 1,120 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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. |
*/ |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sales.product.ui; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.view.list.RowValuesTable; |
import org.openconcerto.sql.view.list.RowValuesTableControlPanel; |
import org.openconcerto.sql.view.list.RowValuesTableModel; |
import org.openconcerto.sql.view.list.RowValuesTablePanel; |
import org.openconcerto.sql.view.list.RowValuesTableRenderer; |
import org.openconcerto.sql.view.list.SQLTableElement; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.table.PercentTableCellRenderer; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.math.BigDecimal; |
import java.util.List; |
import java.util.Vector; |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.ScrollPaneConstants; |
public class CustomerProductFamilyQtyPriceListTable extends RowValuesTablePanel { |
public CustomerProductFamilyQtyPriceListTable() { |
init(); |
uiInit(); |
} |
/** |
* |
*/ |
protected void init() { |
final SQLElement e = getSQLElement(); |
final List<SQLTableElement> list = new Vector<SQLTableElement>(); |
final SQLTableElement tableElementFamille = new SQLTableElement(e.getTable().getField("ID_FAMILLE_ARTICLE")); |
list.add(tableElementFamille); |
// final SQLTableElement eQuantity = new SQLTableElement(e.getTable().getField("QUANTITE")) |
// { |
// @Override |
// protected Object getDefaultNullValue() { |
// return BigDecimal.ONE; |
// } |
// }; |
// list.add(eQuantity); |
SQLTableElement eltPourcent = new SQLTableElement(e.getTable().getField("POURCENT_REMISE")); |
list.add(eltPourcent); |
this.model = new RowValuesTableModel(e, list, e.getTable().getField("ID_FAMILLE_ARTICLE"), false, this.defaultRowVals); |
this.table = new RowValuesTable(this.model, null); |
eltPourcent.setRenderer(new PercentTableCellRenderer()); |
} |
public SQLElement getSQLElement() { |
return Configuration.getInstance().getDirectory().getElement("TARIF_FAMILLE_ARTICLE_CLIENT"); |
} |
public void insertFrom(String field, SQLRowValues row) { |
this.table.insertFrom(field, row); |
} |
protected void uiInit() { |
// Ui init |
this.setLayout(new GridBagLayout()); |
this.setOpaque(false); |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
c.weightx = 1; |
c.gridx = 0; |
final JPanel control = new RowValuesTableControlPanel(this.table); |
control.setOpaque(false); |
this.add(control, c); |
c.gridy++; |
c.fill = GridBagConstraints.BOTH; |
c.weighty = 1; |
c.weightx = 1; |
JScrollPane comp = new JScrollPane(this.table); |
comp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); |
this.add(comp, c); |
this.table.setDefaultRenderer(Long.class, new RowValuesTableRenderer()); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/model/ProductHelper.java |
---|
320,7 → 320,9 |
for (ProductComponent productParent : source) { |
final SQLRowAccessor foreignArticle = childRowValues.getForeign("ID_ARTICLE"); |
ProductComponent childComponent = ProductComponent.createFromRowArticle(foreignArticle, productParent.getSource()); |
int childQ = childRowValues.getInt("QTE"); |
BigDecimal childqD = childRowValues.getBigDecimal("QTE_UNITAIRE"); |
ProductComponent childComponent = ProductComponent.createFromRowArticle(foreignArticle, childqD.multiply(new BigDecimal(childQ)), productParent.getSource()); |
// parentsArticleIDs.remove(foreignArticleParent.getID()); |
// Calcul de la quantité qte_unit * qte * qteMergedParent |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/model/ProductComponent.java |
---|
134,12 → 134,16 |
return null; |
} |
public static ProductComponent createFromRowArticle(SQLRowAccessor rowArticle, SQLRowAccessor rowValsSource) { |
public static ProductComponent createFromRowArticle(SQLRowAccessor rowArticle, BigDecimal qty, SQLRowAccessor rowValsSource) { |
SQLRowAccessor rowStock = getStock(rowArticle, rowArticle, rowValsSource); |
return new ProductComponent(rowArticle, BigDecimal.ONE, rowValsSource, rowStock); |
return new ProductComponent(rowArticle, qty, rowValsSource, rowStock); |
} |
public static ProductComponent createFromRowArticle(SQLRowAccessor rowArticle, SQLRowAccessor rowValsSource) { |
return createFromRowArticle(rowArticle, BigDecimal.ONE, rowValsSource); |
} |
public static ProductComponent createFrom(SQLRowAccessor rowVals) { |
return createFrom(rowVals, 1, rowVals); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/component/ReferenceArticleSQLComponent.java |
---|
89,36 → 89,36 |
public class ReferenceArticleSQLComponent extends BaseSQLComponent { |
private JTextField textPVHT, textPVTTC, textPAHT; |
private JTextField textMetrique1VT, textMetrique1HA; |
protected JTextField textPVHT, textPVTTC, textPAHT; |
protected JTextField textMetrique1VT, textMetrique1HA; |
private final JCheckBox boxService = new JCheckBox(getLabelFor("SERVICE")); |
private final JCheckBox checkObs = new JCheckBox(getLabelFor("OBSOLETE")); |
private JTextField textNom, textCode; |
private JTextField textPoids; |
private JTextField textValMetrique1, textValMetrique2, textValMetrique3; |
private DocumentListener htDocListener, ttcDocListener, detailsListener; |
private PropertyChangeListener propertyChangeListener; |
private PropertyChangeListener taxeListener; |
private final ElementComboBox comboSelTaxe = new ElementComboBox(false, 10); |
private final ElementComboBox comboSelModeVente = new ElementComboBox(false, 25); |
private JLabel labelMetriqueHA1 = new JLabel(getLabelFor("PRIX_METRIQUE_HA_1"), SwingConstants.RIGHT); |
private JLabel labelMetriqueVT1 = new JLabel(getLabelFor("PRIX_METRIQUE_VT_1"), SwingConstants.RIGHT); |
protected final JCheckBox boxService = new JCheckBox(getLabelFor("SERVICE")); |
protected final JCheckBox checkObs = new JCheckBox(getLabelFor("OBSOLETE")); |
protected JTextField textNom, textCode; |
protected JTextField textPoids; |
protected JTextField textValMetrique1, textValMetrique2, textValMetrique3; |
protected DocumentListener htDocListener, ttcDocListener, detailsListener; |
protected PropertyChangeListener propertyChangeListener; |
protected PropertyChangeListener taxeListener; |
protected final ElementComboBox comboSelTaxe = new ElementComboBox(false, 10); |
protected final ElementComboBox comboSelModeVente = new ElementComboBox(false, 25); |
protected JLabel labelMetriqueHA1 = new JLabel(getLabelFor("PRIX_METRIQUE_HA_1"), SwingConstants.RIGHT); |
protected JLabel labelMetriqueVT1 = new JLabel(getLabelFor("PRIX_METRIQUE_VT_1"), SwingConstants.RIGHT); |
private ArticleDesignationTable tableDes = new ArticleDesignationTable(); |
private ArticleCodeClientTable tableCodeClient = new ArticleCodeClientTable(); |
private ArticleTarifTable tableTarifVente = new ArticleTarifTable(this); |
private ArticleCategorieComptableTable tableCatComptable = new ArticleCategorieComptableTable(); |
private SupplierPriceListTable tableFourSec = new SupplierPriceListTable(); |
protected ArticleDesignationTable tableDes = new ArticleDesignationTable(); |
protected ArticleCodeClientTable tableCodeClient = new ArticleCodeClientTable(); |
protected ArticleTarifTable tableTarifVente = new ArticleTarifTable(this); |
protected ArticleCategorieComptableTable tableCatComptable = new ArticleCategorieComptableTable(); |
protected SupplierPriceListTable tableFourSec = new SupplierPriceListTable(); |
private ProductQtyPriceListTable tableTarifQteVente = new ProductQtyPriceListTable(this); |
private ProductItemListTable tableBom; |
private final JTextField textMarge = new JTextField(10); |
private final JLabel labelMarge = new JLabel("% "); |
private ElementComboBox boxCR; |
private JCheckBox boxMargeWithCR; |
protected ProductQtyPriceListTable tableTarifQteVente = new ProductQtyPriceListTable(this); |
protected ProductItemListTable tableBom; |
protected final JTextField textMarge = new JTextField(10); |
protected final JLabel labelMarge = new JLabel("% "); |
protected ElementComboBox boxCR; |
protected JCheckBox boxMargeWithCR; |
private DocumentListener pieceHAArticle = new SimpleDocumentListener() { |
protected DocumentListener pieceHAArticle = new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
129,7 → 129,7 |
} |
}; |
private DocumentListener pieceVTArticle = new SimpleDocumentListener() { |
protected DocumentListener pieceVTArticle = new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
140,7 → 140,7 |
}; |
private DocumentListener listenerMargeTextMarge = new SimpleDocumentListener() { |
protected DocumentListener listenerMargeTextMarge = new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
ReferenceArticleSQLComponent.this.textPVHT.getDocument().removeDocumentListener(ReferenceArticleSQLComponent.this.listenerMargeTextVT); |
150,7 → 150,7 |
}; |
private DocumentListener listenerMargeTextVT = new SimpleDocumentListener() { |
protected DocumentListener listenerMargeTextVT = new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
ReferenceArticleSQLComponent.this.textMarge.getDocument().removeDocumentListener(ReferenceArticleSQLComponent.this.listenerMargeTextMarge); |
196,7 → 196,7 |
} |
}; |
private DocumentListener listenerMargeTextHA = new SimpleDocumentListener() { |
protected DocumentListener listenerMargeTextHA = new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
ReferenceArticleSQLComponent.this.textPVHT.getDocument().removeDocumentListener(ReferenceArticleSQLComponent.this.listenerMargeTextVT); |
205,7 → 205,7 |
} |
}; |
private void updateVtFromMarge() { |
public void updateVtFromMarge() { |
if (this.textPAHT.getText().trim().length() > 0) { |
BigDecimal ha = StringUtils.getBigDecimalFromUserText(this.textPAHT.getText()); |
474,7 → 474,7 |
this.comboSelModeVente.setValue(ReferenceArticleSQLElement.A_LA_PIECE); |
} |
private Component createInfosPanel() { |
protected Component createInfosPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
586,7 → 586,7 |
return panel; |
} |
private Component createDescriptifPanel() { |
protected Component createDescriptifPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
666,7 → 666,7 |
return panel; |
} |
private Component createDesignationPanel() { |
protected Component createDesignationPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
744,7 → 744,7 |
return panel; |
} |
private Component createCodeClientPanel() { |
protected Component createCodeClientPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
760,7 → 760,7 |
return panel; |
} |
private Component createStockPanel() { |
protected Component createStockPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
830,7 → 830,7 |
return panel; |
} |
private Component createComptaPanel() { |
protected Component createComptaPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
872,10 → 872,10 |
return panel; |
} |
private SQLRowValues rowValuesDefaultCodeFournisseur; |
private CodeFournisseurItemTable codeFournisseurTable; |
protected SQLRowValues rowValuesDefaultCodeFournisseur; |
protected CodeFournisseurItemTable codeFournisseurTable; |
private Component createAchatPanel() { |
protected Component createAchatPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1003,7 → 1003,7 |
} |
private JPanel createExportationPanel() { |
protected JPanel createExportationPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1043,7 → 1043,7 |
return panel; |
} |
private JPanel createTarifPanel() { |
protected JPanel createTarifPanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1127,7 → 1127,7 |
return panel; |
} |
private JPanel createCategorieComptablePanel() { |
protected JPanel createCategorieComptablePanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1204,7 → 1204,7 |
return panel; |
} |
private JPanel createBOMpanel() { |
protected JPanel createBOMpanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1255,7 → 1255,7 |
} |
private void updatePricesNomenclature(final JCheckBox checkAutoPrice, final JCheckBox checkAutoPriceHA) { |
protected void updatePricesNomenclature(final JCheckBox checkAutoPrice, final JCheckBox checkAutoPriceHA) { |
final Boolean vtAuto = checkAutoPrice.isSelected(); |
final Boolean haAuto = checkAutoPriceHA.isSelected(); |
if (vtAuto || haAuto) { |
1271,7 → 1271,7 |
} |
} |
private JPanel createTarifQtePanel() { |
protected JPanel createTarifQtePanel() { |
JPanel panel = new JPanel(new GridBagLayout()); |
panel.setOpaque(false); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
1563,7 → 1563,7 |
} |
private void setListenerModeVenteActive(boolean b) { |
protected void setListenerModeVenteActive(boolean b) { |
if (b) { |
this.comboSelModeVente.addValueListener(this.propertyChangeListener); |
} else { |
1575,7 → 1575,7 |
* @param c |
* @param props |
*/ |
private void addModeVenteAvance(GridBagConstraints c) { |
protected void addModeVenteAvance(GridBagConstraints c) { |
DefaultProps props = DefaultNXProps.getInstance(); |
JSeparator sep = new JSeparator(); |
JLabel labelDetails = new JLabel("Article détaillé", SwingConstants.RIGHT); |
1769,7 → 1769,7 |
* |
* @param id id du mode de vente |
*/ |
private void selectModeVente(int id) { |
protected void selectModeVente(int id) { |
this.labelMetriqueHA1.setEnabled(true); |
this.labelMetriqueVT1.setEnabled(true); |
1850,7 → 1850,7 |
return rowVals; |
} |
private void setTextHT() { |
protected void setTextHT() { |
if (!isFilling()) { |
this.textPVHT.getDocument().removeDocumentListener(this.htDocListener); |
final BigDecimal ttc = StringUtils.getBigDecimalFromUserText(this.textPVTTC.getText()); |
1867,7 → 1867,7 |
} |
} |
private void setTextTTC() { |
protected void setTextTTC() { |
if (!isFilling()) { |
this.textPVTTC.getDocument().removeDocumentListener(this.ttcDocListener); |
final BigDecimal ht = StringUtils.getBigDecimalFromUserText(this.textPVHT.getText()); |
1887,7 → 1887,7 |
/** |
* calcul du prix achat et vente ainsi que le poids total pour la piece |
*/ |
private void updatePiece() { |
protected void updatePiece() { |
if (this.comboSelModeVente.getSelectedId() > 1 && this.comboSelModeVente.getSelectedId() != ReferenceArticleSQLElement.A_LA_PIECE) { |
SQLRowValues rowVals = getDetailsRowValues(); |
float poidsTot = ReferenceArticleSQLElement.getPoidsFromDetails(rowVals); |
1924,7 → 1924,7 |
return rowVals; |
} |
private void put(SQLRowValues rowVals, JTextField comp) { |
protected void put(SQLRowValues rowVals, JTextField comp) { |
Float f = (comp.getText() == null || comp.getText().trim().length() == 0) ? 0.0F : Float.valueOf(comp.getText()); |
rowVals.put(this.getView(comp).getField().getName(), f); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/element/ReferenceArticleSQLElement.java |
---|
212,6 → 212,8 |
l.add("PV_HT"); |
l.add("ID_TAXE"); |
l.add("PV_TTC"); |
l.add("ID_COMPTE_PCE"); |
l.add("ID_COMPTE_PCE_ACHAT"); |
l.add("ID_FAMILLE_ARTICLE"); |
l.add("ID_FOURNISSEUR"); |
l.add("POIDS"); |
226,6 → 228,7 |
if (b != null && b.booleanValue()) { |
l.add("SERVICE"); |
} |
return l; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/sales/product/element/CustomerProductFamilyQtyPriceSQLElement.java |
---|
New file |
0,0 → 1,55 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sales.product.element; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.model.DBRoot; |
import java.util.ArrayList; |
import java.util.List; |
public class CustomerProductFamilyQtyPriceSQLElement extends ComptaSQLConfElement { |
public static final String ELEMENT_CODE = "sales.customer.product.family.qty.price"; |
public CustomerProductFamilyQtyPriceSQLElement() { |
super("TARIF_FAMILLE_ARTICLE_CLIENT"); |
} |
@Override |
protected String createCode() { |
return ELEMENT_CODE; |
} |
@Override |
protected List<String> getListFields() { |
final List<String> l = new ArrayList<>(2); |
l.add("ID_FAMILLE_ARTICLE"); |
l.add("QUANTITE"); |
return l; |
} |
@Override |
protected List<String> getComboFields() { |
final List<String> l = new ArrayList<>(1); |
l.add("QUANTITE"); |
return l; |
} |
@Override |
public SQLComponent createComponent() { |
return null; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/element/NumerotationAutoSQLElement.java |
---|
361,6 → 361,13 |
return getNextCodeLetrrage(s); |
} |
public final String getNextCodeLettragePartiel() { |
SQLRow rowNum = this.getTable().getRow(2); |
final String string = rowNum.getString("CODE_LETTRAGE_PARTIEL"); |
String s = (string == null) ? "" : string.trim().toLowerCase(); |
return getNextCodeLettragePartiel(s); |
} |
public static final String getNextCodeLetrrage(String code) { |
code = code.trim(); |
if (code == null || code.length() == 0) { |
394,7 → 401,41 |
} |
public static final String getNextCodeLettragePartiel(String code) { |
code = code.trim(); |
if (code == null || code.length() == 0) { |
return "aaa"; |
} else { |
char[] charArray = code.toCharArray(); |
char c = 'a'; |
int i = charArray.length - 1; |
while (i >= 0 && (c = charArray[i]) == 'z') { |
i--; |
} |
if (i >= 0) { |
c++; |
charArray[i] = c; |
for (int j = i + 1; j < charArray.length; j++) { |
charArray[j] = 'a'; |
} |
code = String.valueOf(charArray); |
} else { |
// On ajoute une lettre |
final StringBuffer buf = new StringBuffer(code.length() + 1); |
final int nb = code.length() + 1; |
for (int j = 0; j < nb; j++) { |
buf.append('a'); |
} |
code = buf.toString(); |
} |
return code; |
} |
} |
private static boolean isNumeroExist(SQLElement element, int num) { |
if (num < 0) { |
return true; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/element/TitrePersonnelSQLElement.java |
---|
16,6 → 16,8 |
import org.openconcerto.sql.element.BaseSQLComponent; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.request.ComboSQLRequest; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
33,6 → 35,12 |
} |
@Override |
protected void _initComboRequest(ComboSQLRequest req) { |
super._initComboRequest(req); |
req.setWhere(new Where(getTable().getField("OBSOLETE"), "=", Boolean.FALSE)); |
} |
@Override |
public boolean isShared() { |
return true; |
} |
42,6 → 50,7 |
l.add("CODE"); |
l.add("NOM"); |
l.add("SEXE_M"); |
l.add("OBSOLETE"); |
return l; |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/ui/TotalCalculator.java |
---|
572,7 → 572,9 |
if (compteArticle != null && !compteArticle.isUndefined()) { |
cpt = compteArticle; |
} else { |
SQLRowAccessor familleArticle = article.getForeign("ID_FAMILLE_ARTICLE"); |
final SQLBackgroundTableCacheItem cacheForTableFamille = SQLBackgroundTableCache.getInstance().getCacheForTable(article.getTable().getForeignTable("ID_FAMILLE_ARTICLE")); |
SQLRowAccessor familleArticle = cacheForTableFamille.getRowFromId(article.getForeignID("ID_FAMILLE_ARTICLE")); |
Set<SQLRowAccessor> unique = new HashSet<SQLRowAccessor>(); |
while (familleArticle != null && !familleArticle.isUndefined() && !unique.contains(familleArticle)) { |
584,7 → 586,7 |
break; |
} |
} |
familleArticle = familleArticle.getForeign("ID_FAMILLE_ARTICLE_PERE"); |
familleArticle = cacheForTableFamille.getRowFromId(familleArticle.getForeignID("ID_FAMILLE_ARTICLE_PERE")); |
} |
} |
} else { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/ui/AbstractAchatArticleItemTable.java |
---|
161,17 → 161,15 |
} |
SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true) { |
@Override |
public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) { |
boolean b = super.isCellEditable(vals, rowIndex, columnIndex); |
if (vals.getTable().contains("ID_COMMANDE_ELEMENT")) { |
boolean noCmdElt = vals.getObject("ID_COMMANDE_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_ELEMENT"); |
return b && noCmdElt; |
} else { |
return b; |
return b && !isFromTranferred(vals); |
} |
} |
}; |
list.add(tableElementArticle); |
207,12 → 205,7 |
@Override |
public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) { |
boolean b = super.isCellEditable(vals, rowIndex, columnIndex); |
if (vals.getTable().contains("ID_COMMANDE_ELEMENT")) { |
boolean noCmdElt = vals.getObject("ID_COMMANDE_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_ELEMENT"); |
return b && noCmdElt; |
} else { |
return b; |
} |
return b && !isFromTranferred(vals); |
} |
}; |
222,12 → 215,7 |
@Override |
public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) { |
boolean b = super.isCellEditable(vals, rowIndex, columnIndex); |
if (vals.getTable().contains("ID_COMMANDE_ELEMENT")) { |
boolean noCmdElt = vals.getObject("ID_COMMANDE_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_ELEMENT"); |
return b && noCmdElt; |
} else { |
return b; |
} |
return b && !isFromTranferred(vals); |
} |
}; |
336,6 → 324,13 |
list.add(tableCmdElt); |
} |
if (e.getTable().contains("ID_BON_RECEPTION_ELEMENT")) { |
SQLTableElement tableBrElt = null; |
tableBrElt = new SQLTableElement(e.getTable().getField("ID_BON_RECEPTION_ELEMENT")); |
tableBrElt.setEditable(false); |
list.add(tableBrElt); |
} |
if (e.getTable().getFieldsName().contains("QTE_ORIGINE")) { |
final SQLTableElement tableQteO = new SQLTableElement(e.getTable().getField("QTE_ORIGINE")); |
tableQteO.setEditable(false); |
511,7 → 506,7 |
this.defaultRowVals.put("ID_DEPOT_STOCK", depotDefault); |
} |
final RowValuesTableModel model = new RowValuesTableModel(e, list, e.getTable().getField("NOM"), false, this.defaultRowVals) { |
final RowValuesTableModel model = new RowValuesTableModel(e, list, e.getTable().getField("QTE"), false, this.defaultRowVals) { |
@Override |
public void commitData() { |
super.commitData(true); |
529,7 → 524,14 |
this.table.getClearCloneTableElement().add("RECU_FORCED"); |
} else if (getSQLElement().getTable().getName().equals("BON_RECEPTION_ELEMENT")) { |
this.table.getClearCloneTableElement().add("ID_COMMANDE_ELEMENT"); |
} else if (getSQLElement().getTable().getName().equals("FACTURE_FOURNISSEUR_ELEMENT")) { |
if (getSQLElement().getTable().contains("ID_COMMANDE_ELEMENT")) { |
this.table.getClearCloneTableElement().add("ID_COMMANDE_ELEMENT"); |
} |
if (getSQLElement().getTable().contains("ID_BON_RECEPTION_ELEMENT")) { |
this.table.getClearCloneTableElement().add("ID_BON_RECEPTION_ELEMENT"); |
} |
} |
table.addMouseListener(new MouseAdapter() { |
@Override |
886,6 → 888,10 |
setColumnVisible(model.getColumnForField("ID_COMMANDE_ELEMENT"), false); |
} |
if (e.getTable().contains("ID_BON_RECEPTION_ELEMENT")) { |
setColumnVisible(model.getColumnForField("ID_BON_RECEPTION_ELEMENT"), false); |
} |
// Gestion des unités de vente |
final boolean gestionUV = prefs.getBoolean(GestionArticleGlobalPreferencePanel.UNITE_VENTE, true); |
setColumnVisible(model.getColumnForField("QTE_UNITAIRE"), gestionUV); |
1425,4 → 1431,19 |
} |
} |
private final List<String> trFields = Arrays.asList("ID_COMMANDE_ELEMENT", "ID_BON_RECEPTION_ELEMENT"); |
private boolean isFromTranferred(SQLRowValues vals) { |
for (String trField : this.trFields) { |
if (vals.getTable().contains(trField)) { |
boolean noCmdElt = vals.getObject(trField) == null || vals.isForeignEmpty(trField); |
if (!noCmdElt) { |
return true; |
} |
} |
} |
return false; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/ui/IListTotalPanel.java |
---|
41,6 → 41,8 |
import javax.swing.JPanel; |
import javax.swing.SwingConstants; |
import javax.swing.event.EventListenerList; |
import javax.swing.event.ListSelectionEvent; |
import javax.swing.event.ListSelectionListener; |
import javax.swing.event.TableModelEvent; |
import javax.swing.event.TableModelListener; |
import javax.swing.table.TableModel; |
93,9 → 95,16 |
} |
public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, String title) { |
this(l, listField, filters, null, title); |
this(l, listField, filters, null, title, false); |
} |
public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot, |
String title) { |
this(l, listField, filters, filtersNot, title, false); |
} |
private final boolean onSelection; |
/** |
* |
* @param l |
103,11 → 112,11 |
* @param filters filtre ex : Tuple((SQLField)NATEXIER,(Boolean)FALSE) |
*/ |
public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot, |
String title) { |
String title, boolean onSelection) { |
super(new GridBagLayout()); |
this.list = l; |
this.setOpaque(false); |
this.onSelection = onSelection; |
GridBagConstraints c = new DefaultGridBagConstraints(); |
c.gridx = GridBagConstraints.RELATIVE; |
c.weightx = 0; |
143,16 → 152,25 |
c.gridy++; |
} |
this.list.addListener(new TableModelListener() { |
if (this.onSelection) { |
this.list.getJTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() { |
private Object getValueAt(final ListSQLLine line, final SQLTableModelColumn col, final List<SQLTableModelColumn> columns) { |
final int indexOf = columns.indexOf(col); |
final Object res = line.getValueAt(indexOf); |
if (res == null) |
throw new IllegalStateException("Null value for " + col + " in " + line); |
return res; |
@Override |
public void valueChanged(ListSelectionEvent e) { |
final List<ListSQLLine> listLines = list.getSelectedLines(); |
for (Tuple2<? extends SQLTableModelColumn, Type> field : listField) { |
if (field.get1() == Type.COUNT) { |
map.get(field.get0()).setText(String.valueOf(listLines.size())); |
} |
} |
computeValues(listField, filters, filtersNot, listLines); |
} |
}); |
} else { |
this.list.addListener(new TableModelListener() { |
@Override |
public void tableChanged(TableModelEvent e) { |
final TableModel model = (TableModel) e.getSource(); |
162,17 → 180,48 |
else |
sqlModel = (ITableModel) ((TableSorter) model).getTableModel(); |
Map<SQLTableModelColumn, BigDecimal> mapTotal = new HashMap<SQLTableModelColumn, BigDecimal>(); |
Map<SQLTableModelColumn, Double> mapPourcent = new HashMap<SQLTableModelColumn, Double>(); |
Map<SQLTableModelColumn, Integer> mapPourcentSize = new HashMap<SQLTableModelColumn, Integer>(); |
final List<ListSQLLine> listLines = new ArrayList<>(); |
for (int i = 0; i < sqlModel.getRowCount(); i++) { |
listLines.add(sqlModel.getRow(i)); |
} |
for (Tuple2<? extends SQLTableModelColumn, Type> field : listField) { |
if (field.get1() == Type.COUNT) { |
map.get(field.get0()).setText(String.valueOf(model.getRowCount())); |
} |
} |
computeValues(listField, filters, filtersNot, listLines); |
} |
for (int i = 0; i < model.getRowCount(); i++) { |
final ListSQLLine line = sqlModel.getRow(i); |
}); |
} |
} |
public void fireUpdated() { |
for (PropertyChangeListener l : this.loadingListener.getListeners(PropertyChangeListener.class)) { |
l.propertyChange(null); |
} |
} |
public void addListener(PropertyChangeListener l) { |
this.loadingListener.add(PropertyChangeListener.class, l); |
} |
private Object getValueAt(final ListSQLLine line, final SQLTableModelColumn col, final List<SQLTableModelColumn> columns) { |
final int indexOf = columns.indexOf(col); |
final Object res = line.getValueAt(indexOf); |
if (res == null) |
throw new IllegalStateException("Null value for " + col + " in " + line); |
return res; |
} |
private void computeValues(final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot, |
final List<ListSQLLine> listLines) { |
Map<SQLTableModelColumn, BigDecimal> mapTotal = new HashMap<SQLTableModelColumn, BigDecimal>(); |
Map<SQLTableModelColumn, Double> mapPourcent = new HashMap<SQLTableModelColumn, Double>(); |
Map<SQLTableModelColumn, Integer> mapPourcentSize = new HashMap<SQLTableModelColumn, Integer>(); |
for (ListSQLLine line : listLines) { |
final SQLRowValues rowAt = line.getRow(); |
final List<SQLTableModelColumn> columns = line.getColumns().getColumns(); |
297,17 → 346,4 |
} |
fireUpdated(); |
} |
}); |
} |
public void fireUpdated() { |
for (PropertyChangeListener l : this.loadingListener.getListeners(PropertyChangeListener.class)) { |
l.propertyChange(null); |
} |
} |
public void addListener(PropertyChangeListener l) { |
this.loadingListener.add(PropertyChangeListener.class, l); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/ui/AbstractVenteArticleItemTable.java |
---|
36,6 → 36,8 |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.FieldPath; |
import org.openconcerto.sql.model.SQLBackgroundTableCache; |
import org.openconcerto.sql.model.SQLBackgroundTableCacheItem; |
import org.openconcerto.sql.model.SQLField; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
1738,6 → 1740,7 |
} |
Collection<? extends SQLRowAccessor> cacheRemise = null; |
Collection<? extends SQLRowAccessor> cacheRemiseFamille = null; |
protected BigDecimal getTarifRemiseClient(SQLRowAccessor article, BigDecimal pv) { |
if (cacheRemise != null) { |
1756,19 → 1759,60 |
} |
protected Acompte getRemiseClient(SQLRowAccessor article) { |
Acompte remise = new Acompte(BigDecimal.ZERO, BigDecimal.ZERO); |
Acompte remise = null; |
if (this.cacheRemiseFamille != null) { |
if (getRowClient() != null && !getRowClient().isUndefined() && article != null && !article.isUndefined()) { |
if (article.getForeign("ID_FAMILLE_ARTICLE") != null && !article.isForeignEmpty("ID_FAMILLE_ARTICLE")) { |
Integer fID = article.getForeignID("ID_FAMILLE_ARTICLE"); |
remise = getRemiseFamille(fID); |
// TODO faire une fonction recursive avec un test pour eviter les boucles |
if (remise == null) { |
SQLBackgroundTableCacheItem cacheTableFamille = SQLBackgroundTableCache.getInstance().getCacheForTable(article.getTable().getForeignTable("ID_FAMILLE_ARTICLE")); |
SQLRow rowFamille = cacheTableFamille.getRowFromId(fID); |
if (rowFamille != null && rowFamille.getObject("ID_FAMILLE_ARTICLE_PERE") != null && !rowFamille.isForeignEmpty("ID_FAMILLE_ARTICLE_PERE")) { |
Integer fIDPere = rowFamille.getForeignID("ID_FAMILLE_ARTICLE_PERE"); |
remise = getRemiseFamille(fIDPere); |
if (remise == null) { |
SQLRow rowFamille2 = cacheTableFamille.getRowFromId(fIDPere); |
if (rowFamille2 != null && rowFamille2.getObject("ID_FAMILLE_ARTICLE_PERE") != null && !rowFamille2.isForeignEmpty("ID_FAMILLE_ARTICLE_PERE")) { |
Integer fIDPere2 = rowFamille2.getForeignID("ID_FAMILLE_ARTICLE_PERE"); |
remise = getRemiseFamille(fIDPere2); |
} |
} |
} |
} |
} |
} |
} |
if (this.cacheRemise != null) { |
if (getRowClient() != null && !getRowClient().isUndefined() && article != null && !article.isUndefined()) { |
for (SQLRowAccessor sqlRowAccessor : this.cacheRemise) { |
if (!sqlRowAccessor.isForeignEmpty("ID_ARTICLE") && sqlRowAccessor.getForeignID("ID_ARTICLE") == article.getID()) { |
BigDecimal r = sqlRowAccessor.getBigDecimal("POURCENT_REMISE"); |
if (remise != null) { |
remise = new Acompte(r, null); |
break; |
} |
} |
} |
} |
if (remise == null) { |
return new Acompte(BigDecimal.ZERO, BigDecimal.ZERO); |
} else { |
return remise; |
} |
} |
private Acompte getRemiseFamille(int fID) { |
Acompte remise = null; |
for (SQLRowAccessor sqlRowAccessor : this.cacheRemiseFamille) { |
if (!sqlRowAccessor.isForeignEmpty("ID_FAMILLE_ARTICLE") && sqlRowAccessor.getForeignID("ID_FAMILLE_ARTICLE") == fID) { |
BigDecimal r = sqlRowAccessor.getBigDecimal("POURCENT_REMISE"); |
remise = new Acompte(r, null); |
break; |
} |
} |
return remise; |
} |
1919,7 → 1963,8 |
super.setClient(rowClient, ask); |
if (getRowClient() != null && !getRowClient().isUndefined()) { |
this.cacheRemise = getRowClient().getReferentRows(getSQLElement().getTable().getTable("TARIF_ARTICLE_CLIENT")); |
if (ask && this.cacheRemise.size() > 0 && getRowValuesTable().getRowCount() > 0 |
this.cacheRemiseFamille = getRowClient().getReferentRows(getSQLElement().getTable().getTable("TARIF_FAMILLE_ARTICLE_CLIENT")); |
if (ask && (!this.cacheRemise.isEmpty() || !this.cacheRemiseFamille.isEmpty()) && getRowValuesTable().getRowCount() > 0 |
&& JOptionPane.showConfirmDialog(null, "Appliquer les remises associées au client sur les lignes déjà présentes?") == JOptionPane.YES_OPTION) { |
int nbRows = this.table.getRowCount(); |
for (int i = 0; i < nbRows; i++) { |
1943,6 → 1988,7 |
} |
} else { |
this.cacheRemise = null; |
this.cacheRemiseFamille = null; |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/common/ui/TotalPanel.java |
---|
172,7 → 172,6 |
GridBagConstraints c = new DefaultGridBagConstraints(); |
c.gridheight = 1; |
c.weighty = 0; |
c.fill = GridBagConstraints.HORIZONTAL; |
// Collone 1 : Selection |
302,7 → 301,6 |
c.gridx = 3; |
c.gridy = 0; |
c.gridheight = GridBagConstraints.REMAINDER; |
c.weighty = 1; |
c.fill = GridBagConstraints.VERTICAL; |
c.weightx = 0; |
this.add(createSeparator(), c); |
309,7 → 307,6 |
c.gridheight = 1; |
c.fill = GridBagConstraints.HORIZONTAL; |
c.weighty = 0; |
c.gridx++; |
this.add(new JLabelBold(TM.tr("TotalPanel.global")), c); //$NON-NLS-1$ |
c.gridy++; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/reports/stat/action/ReportingCommercialFournisseurAction.java |
---|
New file |
0,0 → 1,43 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.reports.stat.action; |
import org.openconcerto.erp.action.CreateFrameAbstractAction; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.ui.PanelFrame; |
import org.openconcerto.erp.core.customerrelationship.customer.report.ReportingCommercialFournisseurPanel; |
import org.openconcerto.sql.model.DBRoot; |
import javax.swing.Action; |
import javax.swing.JFrame; |
public class ReportingCommercialFournisseurAction extends CreateFrameAbstractAction { |
private static final String TITLE = "CA par commercial/fournisseur"; |
private DBRoot root; |
public ReportingCommercialFournisseurAction(ComptaPropsConfiguration conf) { |
super(); |
this.root = conf.getRootSociete(); |
this.putValue(Action.NAME, TITLE); |
this.mustLoadState = false; |
} |
public JFrame createFrame() { |
final PanelFrame panelFrame = new PanelFrame(new ReportingCommercialFournisseurPanel(this.root), TITLE); |
panelFrame.setResizable(false); |
return panelFrame; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/reports/history/ui/HistoriqueClientFrame.java |
---|
56,6 → 56,7 |
mapList.put("Echéances", Arrays.asList("ECHEANCE_CLIENT")); |
mapList.put("Relances", Arrays.asList("RELANCE")); |
mapList.put("Devis", Arrays.asList("DEVIS")); |
mapList.put("Commandes", Arrays.asList("COMMANDE_CLIENT")); |
mapList.put("Avoirs", Arrays.asList("AVOIR_CLIENT")); |
mapList.put("Articles facturés", Arrays.asList("SAISIE_VENTE_FACTURE_ELEMENT")); |
mapList.put("Articles proposés", Arrays.asList("DEVIS_ELEMENT")); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/stock/element/ComposedItemStockUpdater.java |
---|
21,6 → 21,8 |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLSelectJoin; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.SQLTableEvent; |
import org.openconcerto.sql.model.SQLTableEvent.Mode; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.request.UpdateBuilder; |
import org.openconcerto.sql.utils.SQLUtils; |
114,8 → 116,9 |
for (String s : requests) { |
handlers.add(null); |
} |
// FIXME FIRE TABLE CHANGED TO UPDATE ILISTE ?? |
SQLUtils.executeMultiple(stockTable.getDBSystemRoot(), requests, handlers); |
stockTable.fire(new SQLTableEvent(stockTable, SQLRow.NONEXISTANT_ID, Mode.ROW_UPDATED)); |
} |
/** |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/stock/element/InventaireFromEtatStockImporter.java |
---|
385,7 → 385,7 |
} else { |
boolean contains = false; |
for (SQLRowValues sqlRowValues2 : referentRows) { |
if (!sqlRowValues2.isForeignEmpty("ID_ARTICLE") && sqlRowValues2.getForeign("ID_ARTICLE") != null && sqlRowValues2.getForeign("ID_ARTICLE").getString("CODE") != null) { |
if (sqlRowValues2.getForeign("ID_ARTICLE") != null && !sqlRowValues2.isForeignEmpty("ID_ARTICLE") && sqlRowValues2.getForeign("ID_ARTICLE").getString("CODE") != null) { |
if (codeKits.contains(sqlRowValues2.getForeign("ID_ARTICLE").getString("CODE"))) { |
contains = true; |
break; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/stock/element/StockItem.java |
---|
96,13 → 96,13 |
} |
StockItemComponent comp = components.get(0); |
double real = comp.getItem().getRealQty() == 0 ? 0 : Math.ceil(comp.getItem().getRealQty() / (comp.getQty() * comp.getQtyUnit().doubleValue())); |
double virtual = comp.getItem().getVirtualQty() == 0 ? 0 : Math.ceil(comp.getItem().getVirtualQty() / (comp.getQty() * comp.getQtyUnit().doubleValue())); |
double real = comp.getItem().getRealQty() == 0 ? 0 : Math.floor(comp.getItem().getRealQty() / (comp.getQty() * comp.getQtyUnit().doubleValue())); |
double virtual = comp.getItem().getVirtualQty() == 0 ? 0 : Math.floor(comp.getItem().getVirtualQty() / (comp.getQty() * comp.getQtyUnit().doubleValue())); |
for (StockItemComponent stockItemComponent : components) { |
real = Math.min(real, stockItemComponent.getItem().getRealQty() == 0 ? 0 |
: Math.ceil(stockItemComponent.getItem().getRealQty() / (stockItemComponent.getQty() * stockItemComponent.getQtyUnit().doubleValue()))); |
: Math.floor(stockItemComponent.getItem().getRealQty() / (stockItemComponent.getQty() * stockItemComponent.getQtyUnit().doubleValue()))); |
virtual = Math.min(virtual, stockItemComponent.getItem().getVirtualQty() == 0 ? 0 |
: Math.ceil(stockItemComponent.getItem().getVirtualQty() / (stockItemComponent.getQty() * stockItemComponent.getQtyUnit().doubleValue()))); |
: Math.floor(stockItemComponent.getItem().getVirtualQty() / (stockItemComponent.getQty() * stockItemComponent.getQtyUnit().doubleValue()))); |
} |
// La quantité du kit ne peut être négative |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/supplier/action/NouvelHistoriqueListeFournAction.java |
---|
45,7 → 45,11 |
// l.add("SAISIE_ACHAT"); |
// l.add("CHEQUE_FOURNISSEUR"); |
Map<String, List<String>> mapList = new HashMap<String, List<String>>(); |
mapList.put("Commandes", Arrays.asList("COMMANDE")); |
mapList.put("Bons de réception", Arrays.asList("BON_RECEPTION")); |
mapList.put("Factures", Arrays.asList("FACTURE_FOURNISSEUR")); |
mapList.put("Achats", Arrays.asList("SAISIE_ACHAT")); |
mapList.put("Avoirs", Arrays.asList("AVOIR_FOURNISSEUR")); |
mapList.put("Chèques émis", Arrays.asList("CHEQUE_FOURNISSEUR")); |
final HistoriqueFournBilanPanel panelBilan = new HistoriqueFournBilanPanel(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/supplier/component/FournisseurSQLComponent.java |
---|
378,7 → 378,7 |
// BIC |
JLabel labelBIC = new JLabel("BIC", SwingConstants.RIGHT); |
JTextField textBIC = new JTextField(12); |
JTextField textBIC = new JTextField(20); |
c2.gridx = 0; |
c2.gridy++; |
c2.weightx = 0; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/purchase/importer/FacturXExporter.java |
---|
13,16 → 13,25 |
package org.openconcerto.erp.core.supplychain.purchase.importer; |
import org.openconcerto.erp.core.finance.payment.element.ModeDeReglementSQLElement; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import java.math.BigDecimal; |
import java.text.DecimalFormat; |
import java.text.DecimalFormatSymbols; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Locale; |
import java.util.Map; |
import org.jdom2.Document; |
import org.jdom2.Element; |
34,18 → 43,27 |
* FacturX export (EN 16931 format) |
*/ |
public class FacturXExporter { |
private class Tax { |
// Taux, ex pour 20% : 20.00 |
BigDecimal rate; |
final BigDecimal rate; |
// Montant de la TVA |
BigDecimal amount; |
BigDecimal amount = BigDecimal.ZERO; |
// montant HT sur lequel s'applique la TVA |
BigDecimal basisAmount; |
BigDecimal basisAmount = BigDecimal.ZERO; |
public Tax(BigDecimal rate) { |
this.rate = rate; |
} |
public void add(BigDecimal taxAmount, |
BigDecimal basisAmount) { |
this.amount = this.amount.add(taxAmount); |
this.basisAmount = this.basisAmount.add(basisAmount); |
} |
} |
public static Namespace QDT_NS = Namespace.getNamespace("qdt", "urn:un:unece:uncefact:data:standard:QualifiedDataType:100"); |
public static Namespace RAM_NS = Namespace.getNamespace("ram", "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"); |
public static Namespace RSM_NS = Namespace.getNamespace("rsm", "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"); |
56,26 → 74,55 |
FacturXExporter ex = new FacturXExporter(); |
System.err.println("FacturXExporter.main() " + ex.checkEAN13("5987854125989")); |
String xml = ex.createXMLFrom(null, 1); |
System.out.println(xml); |
// String xml = ex.createXMLFrom(null, 1); |
// System.out.println(xml); |
} |
public String createXMLFrom(DBRoot row, int invoiceId) { |
DecimalFormat formatAmount = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); |
List<Tax> taxes = new ArrayList<>(); |
Tax t1 = new Tax(); |
t1.rate = new BigDecimal("20.0"); |
t1.amount = new BigDecimal("40.0"); |
t1.basisAmount = new BigDecimal("200.0"); |
taxes.add(t1); |
private boolean useCommonClient = false; |
DecimalFormat format = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); |
public String createXMLFrom(DBRoot dbRoot, int invoiceId, SQLRow societeRow) { |
SQLTable factureTable = dbRoot.getTable("SAISIE_VENTE_FACTURE"); |
SQLRowValues rowValsToFetch = new SQLRowValues(factureTable); |
rowValsToFetch.putNulls("NUMERO", "DATE", "NOM", "T_TVA", "T_HT", "T_TTC", "NET_A_PAYER"); |
rowValsToFetch.putRowValues("ID_MODE_REGLEMENT").putNulls("COMPTANT", "AJOURS", "LENJOUR", "DATE_FACTURE", "FIN_MOIS").putRowValues("ID_TYPE_REGLEMENT").putNulls("NOM"); |
SQLRowValues putRowValuesClient = rowValsToFetch.putRowValues("ID_CLIENT"); |
putRowValuesClient.putNulls("NOM", "RESPONSABLE", "SIRET", "NUMERO_TVA", "MAIL", "TEL"); |
if (putRowValuesClient.getTable().contains("ID_CLIENT")) { |
this.useCommonClient = true; |
putRowValuesClient.putRowValues("ID_CLIENT").putNulls("NOM", "RESPONSABLE", "SIRET", "NUMERO_TVA", "MAIL", "TEL").putRowValues("ID_ADRESSE").putNulls("RUE", "VILLE", "CODE_POSTAL", |
"PAYS"); |
} |
putRowValuesClient.putRowValues("ID_ADRESSE").putNulls("RUE", "VILLE", "CODE_POSTAL", "PAYS"); |
putRowValuesClient.putRowValues("ID_ADRESSE_F").putNulls("RUE", "VILLE", "CODE_POSTAL", "PAYS"); |
rowValsToFetch.putRowValues("ID_ADRESSE").putNulls("RUE", "VILLE", "CODE_POSTAL", "PAYS"); |
SQLTable factureItemtable = dbRoot.getTable("SAISIE_VENTE_FACTURE_ELEMENT"); |
SQLRowValues rowValsItemsToFetch = new SQLRowValues(factureItemtable); |
rowValsItemsToFetch.putNulls("NIVEAU", "CODE", "NOM", "QTE", "QTE_UNITAIRE", "PV_HT", "T_PV_HT", "T_PV_TTC").putRowValues("ID_TAXE").put("TAUX", null); |
rowValsItemsToFetch.put("ID_SAISIE_VENTE_FACTURE", rowValsToFetch); |
List<SQLRowValues> factures = SQLRowValuesListFetcher.create(rowValsToFetch).fetch(new Where(factureTable.getKey(), "=", invoiceId)); |
SQLRowValues facture = factures.get(0); |
Collection<? extends SQLRowAccessor> factureItems = facture.getReferentRows(factureItemtable.getField("ID_SAISIE_VENTE_FACTURE")); |
Map<Integer, Tax> taxes = new HashMap<>(); |
// Tax t1 = new Tax(); |
// t1.rate = new BigDecimal("20.0"); |
// t1.amount = new BigDecimal("40.0"); |
// t1.basisAmount = new BigDecimal("200.0"); |
// taxes.add(t1); |
DecimalFormat fQty = new DecimalFormat("#0.########", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); |
String invoiceNumber = "-"; |
Date invoiceDate = new Date(); |
String regNote = "SARL au capital de 50 000 EUR"; |
String legNote = "RCS MAVILLE 123 456 789"; |
int nbLines = 4; |
String invoiceNumber = facture.getString("NUMERO"); |
Date invoiceDate = facture.getDate("DATE").getTime(); |
String regNote = societeRow.getString("TYPE") + " au capital de " + societeRow.getObject("CAPITAL") + " €"; |
String legNote = societeRow.getString("RCS"); |
int nbLines = factureItems.size(); |
final Document doc = new Document(); |
Element root = new Element("CrossIndustryInvoice", RSM_NS); |
132,21 → 179,40 |
// SupplyChainTradeTransaction |
Element eSupplyChainTradeTransaction = new Element("SupplyChainTradeTransaction", RSM_NS); |
for (int i = 0; i < nbLines; i++) { |
String productCode = "a"; |
String productName = "b"; |
int lineID = 1; |
for (SQLRowAccessor rowItem : factureItems) { |
String productCode = rowItem.getString("CODE"); |
String productName = rowItem.getString("NOM").trim().length() == 0 ? "Ligne" : rowItem.getString("NOM"); |
BigDecimal pHT = new BigDecimal("12.46"); |
BigDecimal tax = new BigDecimal("0.20"); |
BigDecimal pTTC = new BigDecimal("14.95"); |
BigDecimal qte = new BigDecimal("10.0"); |
BigDecimal totalHTLigne = new BigDecimal("124.60"); |
final BigDecimal pHT, pTTC, totalHTLigne, totalTTCLigne; |
SQLRowAccessor taxeItem = rowItem.getForeign("ID_TAXE"); |
BigDecimal taxValue = new BigDecimal(taxeItem.getFloat("TAUX")).setScale(2); |
if (rowItem.getInt("NIVEAU") != 1) { |
pHT = BigDecimal.ZERO; |
pTTC = BigDecimal.ZERO; |
totalHTLigne = BigDecimal.ZERO; |
totalTTCLigne = BigDecimal.ZERO; |
} else { |
pHT = rowItem.getBigDecimal("PV_HT"); |
pTTC = pHT.multiply(taxValue.add(BigDecimal.ONE)); |
totalHTLigne = rowItem.getBigDecimal("T_PV_HT"); |
totalTTCLigne = rowItem.getBigDecimal("T_PV_TTC"); |
} |
int idTaxe = taxeItem.getID(); |
if (!taxes.containsKey(idTaxe)) { |
Tax t = new Tax(taxValue); |
taxes.put(idTaxe, t); |
} |
taxes.get(idTaxe).add(totalTTCLigne.subtract(totalHTLigne), totalHTLigne); |
BigDecimal qte = new BigDecimal(rowItem.getInt("QTE")).multiply(rowItem.getBigDecimal("QTE_UNITAIRE")); |
Element eLineItem = new Element("IncludedSupplyChainTradeLineItem", RAM_NS); |
// AssociatedDocumentLineDocument |
Element eAssociatedDocumentLineDocument = new Element("AssociatedDocumentLineDocument", RAM_NS); |
Element eLineID = new Element("LineID", RAM_NS); |
eLineID.setText(String.valueOf(i + 1)); |
eLineID.setText(String.valueOf(lineID++)); |
eAssociatedDocumentLineDocument.addContent(eLineID); |
eLineItem.addContent(eAssociatedDocumentLineDocument); |
// SpecifiedTradeProduct |
176,11 → 242,11 |
// Prix unitaire TTC |
Element eGrossPriceProductTradePrice = new Element("GrossPriceProductTradePrice", RAM_NS); |
Element eChargeAmount = new Element("ChargeAmount", RAM_NS); |
eChargeAmount.setText(format.format(pTTC)); |
eChargeAmount.setText(formatAmount.format(pTTC)); |
eGrossPriceProductTradePrice.addContent(eChargeAmount); |
Element eAppliedTradeAllowanceCharge = new Element("AppliedTradeAllowanceCharge", RAM_NS); |
Element eChargeIndicator = new Element("ChargeIndicator", RAM_NS); |
Element eIndicator = new Element("ChargeIndicator", UDT_NS); |
Element eIndicator = new Element("Indicator", UDT_NS); |
// pas de remise |
eIndicator.setText("false"); |
eChargeIndicator.addContent(eIndicator); |
188,17 → 254,17 |
Element eActualAmount = new Element("ActualAmount", RAM_NS); |
// Montant de TVA (unitaire) |
eActualAmount.setText(format.format(pTTC.subtract(pHT))); |
eActualAmount.setText(formatAmount.format(pTTC.subtract(pHT))); |
eAppliedTradeAllowanceCharge.addContent(eActualAmount); |
eGrossPriceProductTradePrice.addContent(eAppliedTradeAllowanceCharge); |
// eGrossPriceProductTradePrice.addContent(eAppliedTradeAllowanceCharge); |
eSpecifiedLineTradeAgreement.addContent(eGrossPriceProductTradePrice); |
// Prix unitaire HT |
Element eNetPriceProductTradePrice = new Element("NetPriceProductTradePrice", RAM_NS); |
Element eChargeAmountHT = new Element("ChargeAmount", RAM_NS); |
eChargeAmountHT.setText(format.format(pHT)); |
eChargeAmountHT.setText(formatAmount.format(pHT)); |
eNetPriceProductTradePrice.addContent(eChargeAmountHT); |
eSpecifiedLineTradeAgreement.addContent(eNetPriceProductTradePrice); |
240,7 → 306,7 |
Element eRateApplicablePercent = new Element("RateApplicablePercent", RAM_NS); |
// 20% -> 20.0 |
eRateApplicablePercent.setText(format.format(tax.multiply(new BigDecimal(100)))); |
eRateApplicablePercent.setText(formatAmount.format(taxValue)); |
eApplicableTradeTaxt.addContent(eRateApplicablePercent); |
eSpecifiedLineTradeSettlement.addContent(eApplicableTradeTaxt); |
248,7 → 314,7 |
Element eSpecifiedTradeSettlementLineMonetarySummation = new Element("SpecifiedTradeSettlementLineMonetarySummation", RAM_NS); |
// Total HT |
Element eLineTotalAmount = new Element("LineTotalAmount", RAM_NS); |
eLineTotalAmount.setText(format.format(totalHTLigne)); |
eLineTotalAmount.setText(formatAmount.format(totalHTLigne)); |
eSpecifiedTradeSettlementLineMonetarySummation.addContent(eLineTotalAmount); |
eSpecifiedLineTradeSettlement.addContent(eSpecifiedTradeSettlementLineMonetarySummation); |
257,12 → 323,11 |
eSupplyChainTradeTransaction.addContent(eLineItem); |
} |
addApplicableHeader(eSupplyChainTradeTransaction, taxes); |
root.addContent(ed); |
addApplicableHeader(societeRow, facture, eSupplyChainTradeTransaction, taxes.values()); |
ed.addContent(eSupplyChainTradeTransaction); |
root.addContent(eSupplyChainTradeTransaction); |
root.addContent(ed); |
final XMLOutputter xmlOutput = new XMLOutputter(); |
xmlOutput.setFormat(Format.getPrettyFormat()); |
return xmlOutput.outputString(doc); |
273,22 → 338,25 |
parent.addContent(element); |
} |
private void addApplicableHeader(Element eSupplyChainTradeTransaction, List<Tax> taxes) { |
private void addApplicableHeader(SQLRowAccessor rowSociete, SQLRowAccessor rowFacture, Element eSupplyChainTradeTransaction, Collection<Tax> taxes) { |
// |
// ApplicableHeaderTradeAgreement |
// |
final Element eApplicableHeaderTradeAgreement = new Element("ApplicableHeaderTradeAgreement", RAM_NS); |
addSupplierInfo(eApplicableHeaderTradeAgreement); |
addBuyerInfo(eApplicableHeaderTradeAgreement); |
addSupplierInfo(eApplicableHeaderTradeAgreement, rowSociete); |
addBuyerInfo(eApplicableHeaderTradeAgreement, rowFacture); |
String orderRef = ""; |
String contractRef = ""; |
// Date de livraison, facultative |
Date effectiveDeliveryDate = new Date(65454654); |
String invoiceNumber = "FA-2017-0010"; |
Date effectiveDeliveryDate = rowFacture.getDate("DATE").getTime(); |
String invoiceNumber = rowFacture.getString("NUMERO"); |
String currencyCode = "EUR"; |
String dueDescription = "30% d'acompte, solde à 30 j"; |
Date dueDate = new Date(65455654); |
SQLRowAccessor foreignMdr = rowFacture.getForeign("ID_MODE_REGLEMENT"); |
int ajours = foreignMdr.getInt("AJOURS"); |
int lenjour = foreignMdr.getInt("LENJOUR"); |
String dueDescription = (ajours > 0 ? "A " + ajours : "") + (lenjour > 0 ? " le " + lenjour : ""); |
Date dueDate = ModeDeReglementSQLElement.calculDate(foreignMdr, rowFacture.getDate("DATE").getTime()); |
final Element eBuyerOrderReferencedDocument = new Element("BuyerOrderReferencedDocument", RAM_NS); |
addValue(eBuyerOrderReferencedDocument, new Element("IssuerAssignedID", RAM_NS), orderRef); |
330,6 → 398,7 |
addValue(eApplicableHeaderTradeSettlement, new Element("PaymentReference", RAM_NS), invoiceNumber); |
addValue(eApplicableHeaderTradeSettlement, new Element("InvoiceCurrencyCode", RAM_NS), currencyCode); |
final Element aSpecifiedTradeSettlementPaymentMeans = new Element("SpecifiedTradeSettlementPaymentMeans", RAM_NS); |
addValue(aSpecifiedTradeSettlementPaymentMeans, new Element("TypeCode", RAM_NS), "57"); |
// <ram:TypeCode>30</ram:TypeCode> |
// <ram:Information>Virement sur compte Banque Fiducial</ram:Information> |
380,7 → 449,38 |
eApplicableHeaderTradeSettlement.addContent(eSpecifiedTradePaymentTerms); |
final Element eSpecifiedTradeSettlementHeaderMonetarySummation = new Element("SpecifiedTradeSettlementHeaderMonetarySummation", RAM_NS); |
final Element eTotalHT = new Element("LineTotalAmount", RAM_NS); |
eTotalHT.setText(this.formatAmount.format(new BigDecimal(rowFacture.getLong("T_HT")).movePointLeft(2))); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalHT); |
final Element eTotalBaseTVA = new Element("TaxBasisTotalAmount", RAM_NS); |
BigDecimal totalBaseTVA = BigDecimal.ZERO; |
for (Tax tax : taxes) { |
totalBaseTVA = totalBaseTVA.add(tax.basisAmount); |
} |
eTotalBaseTVA.setText(this.formatAmount.format(totalBaseTVA)); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalBaseTVA); |
final Element eTotalTVA = new Element("TaxTotalAmount", RAM_NS); |
eTotalTVA.setAttribute("currencyID", "EUR"); |
eTotalTVA.setText(this.formatAmount.format(new BigDecimal(rowFacture.getLong("T_TVA")).movePointLeft(2))); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalTVA); |
final Element eTotalTTC = new Element("GrandTotalAmount", RAM_NS); |
BigDecimal totalTTC = new BigDecimal(rowFacture.getLong("T_TTC")).movePointLeft(2); |
eTotalTTC.setText(this.formatAmount.format(totalTTC)); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalTTC); |
final Element eTotalPrepaid = new Element("TotalPrepaidAmount", RAM_NS); |
BigDecimal netApayer = new BigDecimal(rowFacture.getLong("NET_A_PAYER")).movePointLeft(2); |
eTotalPrepaid.setText(this.formatAmount.format(totalTTC.subtract(netApayer))); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalPrepaid); |
final Element eTotalDue = new Element("DuePayableAmount", RAM_NS); |
eTotalDue.setText(this.formatAmount.format(netApayer)); |
eSpecifiedTradeSettlementHeaderMonetarySummation.addContent(eTotalDue); |
// Total HT |
// <ram:LineTotalAmount>624.90</ram:LineTotalAmount> |
// Total HT sur leque est appliqué la TVA |
400,20 → 500,35 |
} |
private void addBuyerInfo(final Element eApplicableHeaderTradeAgreement) { |
private void addBuyerInfo(final Element eApplicableHeaderTradeAgreement, final SQLRowAccessor rowFacture) { |
SQLRowAccessor client = rowFacture.getForeign("ID_CLIENT"); |
SQLRowAccessor clientGestion = client; |
if (this.useCommonClient) { |
client = client.getForeign("ID_CLIENT"); |
} |
final SQLRowAccessor adr; |
if (!rowFacture.isForeignEmpty("ID_ADRESSE")) { |
adr = rowFacture.getForeign("ID_ADRESSE"); |
} else if (!clientGestion.isForeignEmpty("ID_ADRESSE_F")) { |
adr = clientGestion.getForeign("ID_ADRESSE_F"); |
} else { |
adr = client.getForeign("ID_ADRESSE"); |
} |
// Acheteur |
String buyerName = "Ma jolie boutique"; |
String buyerSIRET = "78787878400035"; |
String buyerVAT = "FR19787878784"; |
String buyerContactName = "Alexandre Payet"; |
String buyerPhone = "+33 4 72 07 08 67"; |
String buyerEmail = "alexandre.payet@majolieboutique.net"; |
String buyerAddrL1 = "35 rue de la République"; |
String buyerName = client.getString("NOM"); |
String buyerSIRET = client.getString("SIRET"); |
String buyerVAT = client.getString("NUMERO_TVA"); |
String buyerContactName = client.getString("RESPONSABLE"); |
String buyerPhone = client.getString("TEL"); |
String buyerEmail = client.getString("MAIL"); |
String buyerAddrL1 = adr.getString("RUE"); |
String buyerAddrL2 = ""; |
String buyerAddrL3 = ""; |
String buyerPostalCode = "69001"; |
String buyerCity = "Lyon"; |
String buyerCountryCode = "FR"; |
String buyerPostalCode = adr.getString("CODE_POSTAL"); |
String buyerCity = adr.getString("VILLE"); |
String buyerCountryCode = resolveCountryCode(adr.getString("PAYS")); |
final Element eBuyerTradeParty = new Element("BuyerTradeParty", RAM_NS); |
this.addValue(eBuyerTradeParty, new Element("Name", RAM_NS), buyerName); |
439,19 → 554,20 |
eBuyerTradeParty.addContent(eDefinedTradeContact); |
// Adresse postale |
final Element ePostalTradeAddress = new Element("PostalTradeAddress", RAM_NS); |
addValue(ePostalTradeAddress, new Element("LineOne>", RAM_NS), buyerAddrL1); |
addValue(ePostalTradeAddress, new Element("PostcodeCode", RAM_NS), buyerPostalCode); |
addValue(ePostalTradeAddress, new Element("LineOne", RAM_NS), buyerAddrL1); |
if (buyerAddrL2 != null && !buyerAddrL2.trim().isEmpty()) { |
addValue(ePostalTradeAddress, new Element("LineTwo>", RAM_NS), buyerAddrL2); |
addValue(ePostalTradeAddress, new Element("LineTwo", RAM_NS), buyerAddrL2); |
} |
if (buyerAddrL3 != null && !buyerAddrL3.trim().isEmpty()) { |
addValue(ePostalTradeAddress, new Element("LineThree>", RAM_NS), buyerAddrL3); |
addValue(ePostalTradeAddress, new Element("LineThree", RAM_NS), buyerAddrL3); |
} |
addValue(ePostalTradeAddress, new Element("PostcodeCode>", RAM_NS), buyerPostalCode); |
addValue(ePostalTradeAddress, new Element("CityName>", RAM_NS), buyerCity); |
addValue(ePostalTradeAddress, new Element("CountryID>", RAM_NS), buyerCountryCode); |
addValue(ePostalTradeAddress, new Element("CityName", RAM_NS), buyerCity); |
addValue(ePostalTradeAddress, new Element("CountryID", RAM_NS), buyerCountryCode); |
eBuyerTradeParty.addContent(ePostalTradeAddress); |
if (buyerVAT != null && buyerVAT.trim().length() > 0) { |
// TVA |
final Element eSpecifiedTaxRegistration = new Element("SpecifiedTaxRegistration", RAM_NS); |
final Element eSpecifiedTaxRegistrationId = new Element("ID", RAM_NS); |
459,23 → 575,24 |
eSpecifiedTaxRegistrationId.setText(buyerVAT); |
eSpecifiedTaxRegistration.addContent(eSpecifiedTaxRegistrationId); |
eBuyerTradeParty.addContent(eSpecifiedTaxRegistration); |
} |
eApplicableHeaderTradeAgreement.addContent(eBuyerTradeParty); |
} |
private void addSupplierInfo(final Element eApplicableHeaderTradeAgreement) { |
String supplierName = "Au bon moulin"; |
String supplierSIRET = "121321321321"; |
String supplierContactName = "Tony Dubois"; |
String supplierContactPhone = "+33 4 72 07 08 56"; |
String supplierContactEmail = "tony.dubois@aubonmoulin.fr"; |
String supplierAddrL1 = "3 rue du pont"; |
private void addSupplierInfo(final Element eApplicableHeaderTradeAgreement, SQLRowAccessor rowSociete) { |
String supplierName = rowSociete.getString("NOM"); |
String supplierSIRET = rowSociete.getString("NUM_SIRET"); |
String supplierContactName = ""; |
String supplierContactPhone = rowSociete.getString("NUM_TEL"); |
String supplierContactEmail = rowSociete.getString("MAIL"); |
SQLRowAccessor adr = rowSociete.getForeign("ID_ADRESSE_COMMON"); |
String supplierAddrL1 = adr.getString("RUE"); |
String supplierAddrL2 = ""; |
String supplierAddrL3 = ""; |
String supplierAddrPostalCode = "80100"; |
String supplierAddrCityName = "Abbeville"; |
String supplierAddrCountryID = "FR"; |
String supplierNumTVA = "FR121321321321"; |
String supplierAddrPostalCode = adr.getString("CODE_POSTAL"); |
String supplierAddrCityName = adr.getString("VILLE"); |
String supplierAddrCountryID = resolveCountryCode(adr.getString("PAYS")); |
String supplierNumTVA = rowSociete.getString("NUM_NII"); |
// Vendeur |
final Element eSellerTradeParty = new Element("SellerTradeParty", RAM_NS); |
addValue(eSellerTradeParty, new Element("Name", RAM_NS), supplierName); |
507,6 → 624,7 |
eSellerTradeParty.addContent(eDefinedTradeContact); |
final Element ePostalTradeAddress = new Element("PostalTradeAddress", RAM_NS); |
addValue(ePostalTradeAddress, new Element("PostcodeCode", RAM_NS), supplierAddrPostalCode); |
addValue(ePostalTradeAddress, new Element("LineOne", RAM_NS), supplierAddrL1); |
if (supplierAddrL2 != null && !supplierAddrL2.trim().isEmpty()) { |
addValue(ePostalTradeAddress, new Element("LineTwo", RAM_NS), supplierAddrL2); |
514,7 → 632,6 |
if (supplierAddrL3 != null && !supplierAddrL3.trim().isEmpty()) { |
addValue(ePostalTradeAddress, new Element("LineThree", RAM_NS), supplierAddrL3); |
} |
addValue(ePostalTradeAddress, new Element("PostcodeCode", RAM_NS), supplierAddrPostalCode); |
addValue(ePostalTradeAddress, new Element("CityName", RAM_NS), supplierAddrCityName); |
addValue(ePostalTradeAddress, new Element("CountryID", RAM_NS), supplierAddrCountryID); |
568,4 → 685,56 |
} |
return Integer.valueOf(code.substring(12, 13)).intValue() == checkdigit; |
} |
private String resolveCountryCode(String pays) { |
if (pays == null || pays.trim().length() == 0) { |
return "FR"; |
} else if (pays.toLowerCase().equals("france")) { |
return "FR"; |
} else if (pays.toLowerCase().equals("fr")) { |
return "FR"; |
} else if (pays.toLowerCase().equals("polska")) { |
return "PL"; |
} else if (pays.toLowerCase().equals("pologne")) { |
return "PL"; |
} else if (pays.toLowerCase().equals("pl")) { |
return "PL"; |
} else if (pays.toLowerCase().equals("allemagne")) { |
return "DE"; |
} else if (pays.toLowerCase().equals("de")) { |
return "DE"; |
} else if (pays.toLowerCase().equals("deutschland")) { |
return "DE"; |
} else if (pays.toLowerCase().equals("italie")) { |
return "IT"; |
} else if (pays.toLowerCase().equals("italy")) { |
return "IT"; |
} else if (pays.toLowerCase().equals("italia")) { |
return "IT"; |
} else if (pays.toLowerCase().equals("it")) { |
return "IT"; |
} else if (pays.toLowerCase().equals("espagne")) { |
return "SP"; |
} else if (pays.toLowerCase().equals("spain")) { |
return "SP"; |
} else if (pays.toLowerCase().equals("sp")) { |
return "SP"; |
} else if (pays.toLowerCase().equals("luxembourg")) { |
return "LU"; |
} else if (pays.toLowerCase().equals("lu")) { |
return "LU"; |
} else if (pays.toLowerCase().equals("portugal")) { |
return "PT"; |
} else if (pays.toLowerCase().equals("pt")) { |
return "PT"; |
} else if (pays.toLowerCase().equals("belgique")) { |
return "BE"; |
} else if (pays.toLowerCase().equals("belgium")) { |
return "BE"; |
} else if (pays.toLowerCase().equals("be")) { |
return "BE"; |
} else { |
return ""; |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/component/FactureFournisseurSQLComponent.java |
---|
16,6 → 16,7 |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.component.TransfertBaseSQLComponent; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement; |
import org.openconcerto.erp.core.common.ui.AbstractVenteArticleItemTable; |
import org.openconcerto.erp.core.common.ui.DeviseField; |
import org.openconcerto.erp.core.common.ui.TotalPanel; |
29,7 → 30,6 |
import org.openconcerto.erp.panel.PanelOOSQLComponent; |
import org.openconcerto.erp.preferences.DefaultNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.DefaultElementSQLObject; |
import org.openconcerto.sql.element.ElementSQLObject; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLBackgroundTableCache; |
41,16 → 41,19 |
import org.openconcerto.sql.preferences.SQLPreferences; |
import org.openconcerto.sql.request.ComboSQLRequest; |
import org.openconcerto.sql.sqlobject.ElementComboBox; |
import org.openconcerto.sql.sqlobject.JUniqueTextField; |
import org.openconcerto.sql.sqlobject.SQLRequestComboBox; |
import org.openconcerto.sql.users.UserManager; |
import org.openconcerto.sql.view.list.RowValuesTable; |
import org.openconcerto.sql.view.list.RowValuesTableModel; |
import org.openconcerto.ui.AutoHideListener; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.FormLayouter; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.ui.TitledSeparator; |
import org.openconcerto.ui.component.ITextArea; |
import org.openconcerto.ui.preferences.DefaultProps; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.checks.ValidState; |
import org.openconcerto.utils.text.SimpleDocumentListener; |
import java.awt.Color; |
60,6 → 63,8 |
import java.beans.PropertyChangeListener; |
import java.math.BigDecimal; |
import java.sql.SQLException; |
import java.util.Arrays; |
import java.util.Date; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
68,6 → 73,7 |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.JTabbedPane; |
import javax.swing.JTextField; |
import javax.swing.SwingConstants; |
import javax.swing.SwingUtilities; |
83,7 → 89,8 |
private ElementComboBox fourn = new ElementComboBox(); |
private ElementComboBox comptePCE = new ElementComboBox(); |
private ElementComboBox avoirFourn = new ElementComboBox(); |
private DefaultElementSQLObject compAdr; |
private ElementComboBox avoirFourn2 = new ElementComboBox(); |
private PanelOOSQLComponent panelOO; |
final JPanel panelAdrSpec = new JPanel(new GridBagLayout()); |
private JDate dateCommande = new JDate(); |
97,15 → 104,9 |
public void propertyChange(PropertyChangeEvent evt) { |
SQLRow rowFourn = fourn.getRequest().getPrimaryTable().getRow(fourn.getWantedID()); |
final SQLRow rowFourn = FactureFournisseurSQLComponent.this.fourn.getRequest().getPrimaryTable().getRow(FactureFournisseurSQLComponent.this.fourn.getWantedID()); |
if ((getMode() == Mode.INSERTION || !isFilling()) && rowFourn != null && !rowFourn.isUndefined()) { |
if (!isFilling() && rowFourn != null && !rowFourn.isUndefined()) { |
// SQLRow rowCharge = rowFourn.getForeign("ID_COMPTE_PCE_CHARGE"); |
// if (rowCharge != null && !rowCharge.isUndefined()) { |
// compteSel.setValue(rowCharge); |
// } |
int idModeRegl = rowFourn.getInt("ID_MODE_REGLEMENT"); |
if (idModeRegl > 1 && FactureFournisseurSQLComponent.this.eltModeRegl != null && getMode() == Mode.INSERTION) { |
SQLElement sqlEltModeRegl = getElement().getDirectory().getElement("MODE_REGLEMENT"); |
113,9 → 114,8 |
SQLRowValues rowVals = rowModeRegl.createUpdateRow(); |
rowVals.clearPrimaryKeys(); |
FactureFournisseurSQLComponent.this.eltModeRegl.setValue(rowVals); |
System.err.println("Select Mode regl " + idModeRegl); |
} |
// } |
} |
} |
139,21 → 139,79 |
return s; |
} |
@Override |
public synchronized ValidState getValidState() { |
if (getTable().contains("ID_COMPTE_PCE") && getTable().contains("ID_TYPE_CMD") && getTable().getTable("FACTURE_FOURNISSEUR_ELEMENT").contains("ID_COMPTE_PCE")) { |
SQLRequestComboBox boxCpt = (SQLRequestComboBox) getView("ID_COMPTE_PCE").getComp(); |
final SQLRow selectedCpt = boxCpt.getSelectedRow(); |
if (selectedCpt == null || selectedCpt.isUndefined()) { |
RowValuesTableModel tableRow = this.table.getRowValuesTable().getRowValuesTableModel(); |
for (int i = 0; i < tableRow.getRowCount(); i++) { |
SQLRowValues rowVals = tableRow.getRowValuesAt(i); |
if (rowVals.getInt("QTE") != 0 && (rowVals.getObject("ID_COMPTE_PCE") == null || rowVals.isForeignEmpty("ID_COMPTE_PCE"))) { |
return ValidState.create(false, "Aucun compte global sélectionné et une ligne avec une quantité > 0 n'est pas affectée à un compte!"); |
} |
} |
} |
} |
return super.getValidState(); |
} |
private JUniqueTextField numero; |
public void addViews() { |
this.setLayout(new GridBagLayout()); |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
if (getTable().getTable("NUMEROTATION_AUTO").contains("FACTURE_FOURNISSEUR_START")) { |
this.numero = new JUniqueTextField(35) { |
@Override |
public String getAutoRefreshNumber() { |
if (getMode() == Mode.INSERTION) { |
final Date date = FactureFournisseurSQLComponent.this.dateCommande.getDate(); |
return NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), date == null ? new Date() : date); |
} else { |
return null; |
} |
} |
}; |
this.dateCommande.addValueListener(new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
if (!isFilling() && FactureFournisseurSQLComponent.this.dateCommande.getValue() != null) { |
final String nextNumero = NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), FactureFournisseurSQLComponent.this.dateCommande.getValue()); |
if (FactureFournisseurSQLComponent.this.numero.getText().trim().length() > 0 && !nextNumero.equalsIgnoreCase(FactureFournisseurSQLComponent.this.numero.getText())) { |
int answer = JOptionPane.showConfirmDialog(FactureFournisseurSQLComponent.this, "Voulez vous actualiser le numéro de la facture?", "Changement du numéro de facture", |
JOptionPane.YES_NO_OPTION); |
if (answer == JOptionPane.NO_OPTION) { |
return; |
} |
} |
FactureFournisseurSQLComponent.this.numero.setText(nextNumero); |
} |
} |
}); |
} else { |
this.numero = new JUniqueTextField(35); |
} |
// Numero du commande |
c.gridx = 0; |
c.weightx = 0; |
this.add(new JLabel(getLabelFor("NUMERO"), SwingConstants.RIGHT), c); |
JTextField numero = new JTextField(25); |
c.gridx++; |
c.weightx = 1; |
c.fill = GridBagConstraints.NONE; |
DefaultGridBagConstraints.lockMinimumSize(numero); |
this.add(numero, c); |
DefaultGridBagConstraints.lockMinimumSize(this.numero); |
this.add(this.numero, c); |
// Date |
JLabel labelDate = new JLabel(getLabelFor("DATE")); |
165,14 → 223,14 |
c.gridx++; |
c.fill = GridBagConstraints.NONE; |
this.add(dateCommande, c); |
this.add(this.dateCommande, c); |
this.dateCommande.addValueListener(new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
if (!isFilling() && dateCommande.getValue() != null) { |
table.setDateDevise(dateCommande.getValue()); |
if (!isFilling() && FactureFournisseurSQLComponent.this.dateCommande.getValue() != null) { |
FactureFournisseurSQLComponent.this.table.setDateDevise(FactureFournisseurSQLComponent.this.dateCommande.getValue()); |
updateLabelTauxConversion(); |
} |
} |
193,23 → 251,23 |
this.add(this.fourn, c); |
addRequiredSQLObject(this.fourn, "ID_FOURNISSEUR"); |
fourn.addModelListener("wantedID", new PropertyChangeListener() { |
this.fourn.addModelListener("wantedID", new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
int wantedID = fourn.getWantedID(); |
int wantedID = FactureFournisseurSQLComponent.this.fourn.getWantedID(); |
if (wantedID != SQLRow.NONEXISTANT_ID && wantedID >= SQLRow.MIN_VALID_ID) { |
final SQLRow rowF = getTable().getForeignTable("ID_FOURNISSEUR").getRow(wantedID); |
if (rowF.getObject("ID_CATEGORIE_COMPTABLE") != null && !rowF.isForeignEmpty("ID_CATEGORIE_COMPTABLE")) { |
table.setRowCatComptable(rowF.getForeign("ID_CATEGORIE_COMPTABLE")); |
FactureFournisseurSQLComponent.this.table.setRowCatComptable(rowF.getForeign("ID_CATEGORIE_COMPTABLE")); |
} else { |
table.setRowCatComptable(null); |
FactureFournisseurSQLComponent.this.table.setRowCatComptable(null); |
} |
} else { |
table.setRowCatComptable(null); |
FactureFournisseurSQLComponent.this.table.setRowCatComptable(null); |
} |
} |
}); |
250,8 → 308,8 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
table.setFournisseur(fourn.getSelectedRow()); |
SQLRow row = fourn.getSelectedRow(); |
FactureFournisseurSQLComponent.this.table.setFournisseur(FactureFournisseurSQLComponent.this.fourn.getSelectedRow()); |
SQLRow row = FactureFournisseurSQLComponent.this.fourn.getSelectedRow(); |
if (!isFilling()) { |
if (row != null && !row.isUndefined() && !row.isForeignEmpty("ID_DEVISE")) { |
boxDevise.setValue(row.getForeignID("ID_DEVISE")); |
259,9 → 317,10 |
} |
if (row != null && !row.isUndefined()) { |
avoirFourn.getRequest().setWhere(new Where(avoirFourn.getRequest().getPrimaryTable().getField("ID_FOURNISSEUR"), "=", row.getID())); |
FactureFournisseurSQLComponent.this.avoirFourn.getRequest() |
.setWhere(new Where(FactureFournisseurSQLComponent.this.avoirFourn.getRequest().getPrimaryTable().getField("ID_FOURNISSEUR"), "=", row.getID())); |
} else { |
avoirFourn.getRequest().setWhere(null); |
FactureFournisseurSQLComponent.this.avoirFourn.getRequest().setWhere(null); |
} |
} |
}); |
355,21 → 414,21 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
table.setDevise(boxDevise.getSelectedRow()); |
FactureFournisseurSQLComponent.this.table.setDevise(boxDevise.getSelectedRow()); |
updateLabelTauxConversion(); |
} |
}); |
fieldTaux.getDocument().addDocumentListener(new SimpleDocumentListener() { |
this.fieldTaux.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
BigDecimal tauxConversion = null; |
if (fieldTaux.getText().trim().length() > 0) { |
tauxConversion = new BigDecimal(fieldTaux.getText()); |
if (FactureFournisseurSQLComponent.this.fieldTaux.getText().trim().length() > 0) { |
tauxConversion = new BigDecimal(FactureFournisseurSQLComponent.this.fieldTaux.getText()); |
} |
table.setTauxConversion(tauxConversion); |
FactureFournisseurSQLComponent.this.table.setTauxConversion(tauxConversion); |
updateLabelTauxConversion(); |
} |
}); |
379,13 → 438,13 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
table.setFournisseur(fourn.getSelectedRow()); |
FactureFournisseurSQLComponent.this.table.setFournisseur(FactureFournisseurSQLComponent.this.fourn.getSelectedRow()); |
if (!isFilling()) { |
SQLRow row = fourn.getSelectedRow(); |
SQLRow row = FactureFournisseurSQLComponent.this.fourn.getSelectedRow(); |
if (row != null && !row.isUndefined()) { |
row.fetchValues(); |
if (!row.isForeignEmpty("ID_COMPTE_PCE_CHARGE")) { |
comptePCE.setValue(row.getForeign("ID_COMPTE_PCE_CHARGE")); |
FactureFournisseurSQLComponent.this.comptePCE.setValue(row.getForeign("ID_COMPTE_PCE_CHARGE")); |
} |
} |
} |
395,18 → 454,13 |
c.gridy++; |
c.weighty = 0; |
this.add(getBottomPanel(), c); |
ModeDeReglementSQLComponent modeReglComp; |
modeReglComp = (ModeDeReglementSQLComponent) this.eltModeRegl.getSQLChild(); |
ModeDeReglementSQLComponent modeReglComp = (ModeDeReglementSQLComponent) this.eltModeRegl.getSQLChild(); |
modeReglComp.addDateCompListener(this.dateCommande); |
// Modèle, visualiser, imprimer.. |
c.gridx = 0; |
c.gridy++; |
c.fill = GridBagConstraints.HORIZONTAL; |
c.anchor = GridBagConstraints.WEST; |
c.gridx = 0; |
c.gridy++; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.SOUTHEAST; |
c.gridwidth = GridBagConstraints.REMAINDER; |
415,8 → 469,8 |
this.add(this.panelOO, c); |
addSQLObject(textNom, "NOM"); |
addRequiredSQLObject(dateCommande, "DATE"); |
addRequiredSQLObject(numero, "NUMERO"); |
addRequiredSQLObject(this.dateCommande, "DATE"); |
addRequiredSQLObject(this.numero, "NUMERO"); |
addSQLObject(this.infos, "INFOS"); |
DefaultGridBagConstraints.lockMinimumSize(this.fourn); |
439,60 → 493,80 |
final JPanel panel = new JPanel(new GridBagLayout()); |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
// Colonne 1 : Infos |
JTabbedPane tabs = new JTabbedPane(); |
JPanel mainBottomPanel = new JPanel(); |
mainBottomPanel.setOpaque(false); |
tabs.add(mainBottomPanel, "Règlements et caractéristiques"); |
final JScrollPane scrollPane = new JScrollPane(this.infos); |
scrollPane.setBorder(null); |
tabs.add(scrollPane, getLabelFor("INFOS")); |
c.gridx = 0; |
c.weightx = 1; |
c.anchor = GridBagConstraints.WEST; |
c.fill = GridBagConstraints.HORIZONTAL; |
c.fill = GridBagConstraints.BOTH; |
panel.add(tabs, c); |
panel.add(new TitledSeparator(getLabelFor("INFOS")), c); |
mainBottomPanel.setLayout(new GridBagLayout()); |
GridBagConstraints cMainBottomPanel = new DefaultGridBagConstraints(); |
c.gridy++; |
c.weighty = 0; |
c.weightx = 1; |
c.fill = GridBagConstraints.BOTH; |
final JScrollPane scrollPane = new JScrollPane(this.infos); |
scrollPane.setBorder(null); |
panel.add(scrollPane, c); |
// Colonne 1 : Infos |
cMainBottomPanel.weighty = 0; |
cMainBottomPanel.weightx = 0; |
cMainBottomPanel.fill = GridBagConstraints.BOTH; |
this.addView("ID_MODE_REGLEMENT", REQ + ";" + DEC + ";" + SEP); |
this.eltModeRegl = (ElementSQLObject) this.getView("ID_MODE_REGLEMENT"); |
c.gridx++; |
c.fill = GridBagConstraints.NONE; |
c.weightx = 1; |
c.weighty = 1; |
eltModeRegl.setOpaque(false); |
panel.add(eltModeRegl, c); |
this.eltModeRegl.setOpaque(false); |
mainBottomPanel.add(this.eltModeRegl, cMainBottomPanel); |
// Colonne 2 : Poids & autres |
JPanel column2 = new JPanel(); |
column2.setOpaque(false); |
cMainBottomPanel.gridx++; |
cMainBottomPanel.weightx = 0; |
mainBottomPanel.add(column2, cMainBottomPanel); |
column2.setLayout(new GridBagLayout()); |
GridBagConstraints c2 = new DefaultGridBagConstraints(); |
c2.weightx = 0; |
c2.weighty = 0; |
c2.gridwidth = 1; |
c2.gridheight = 1; |
c2.fill = GridBagConstraints.HORIZONTAL; |
c2.anchor = GridBagConstraints.NORTHEAST; |
// Poids |
DefaultProps props = DefaultNXProps.getInstance(); |
Boolean b = props.getBooleanValue("ArticleShowPoids"); |
Boolean poidsVisible = props.getBooleanValue("ArticleShowPoids"); |
if (poidsVisible) { |
column2.add(new JLabel(getLabelFor("T_POIDS"), SwingConstants.RIGHT), c2); |
final JTextField textPoidsTotal = new JTextField(8); |
JTextField poids = new JTextField(); |
if (b) { |
final JPanel panelPoids = new JPanel(); |
panelPoids.add(new JLabel(getLabelFor("T_POIDS")), c); |
textPoidsTotal.setEnabled(false); |
textPoidsTotal.setHorizontalAlignment(JTextField.RIGHT); |
textPoidsTotal.setDisabledTextColor(Color.BLACK); |
c2.weightx = 1; |
c2.gridx++; |
column2.add(textPoidsTotal, c2); |
DefaultGridBagConstraints.lockMinimumSize(textPoidsTotal); |
addSQLObject(textPoidsTotal, "T_POIDS"); |
panelPoids.add(textPoidsTotal, c); |
this.table.getModel().addTableModelListener(new TableModelListener() { |
c.gridx++; |
c.gridy = 0; |
c.weightx = 0; |
c.weighty = 0; |
c.gridwidth = 1; |
c.gridheight = 2; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.NORTHEAST; |
panel.add(panelPoids, c); |
DefaultGridBagConstraints.lockMinimumSize(panelPoids); |
addSQLObject(textPoidsTotal, "T_POIDS"); |
public void tableChanged(TableModelEvent e) { |
textPoidsTotal.setText(String.valueOf(FactureFournisseurSQLComponent.this.table.getPoidsTotal())); |
} |
}); |
} else { |
addSQLObject(poids, "T_POIDS"); |
addSQLObject(new JTextField(), "T_POIDS"); |
} |
DeviseField textPortHT = new DeviseField(); |
499,52 → 573,75 |
ElementComboBox comboTaxePort = new ElementComboBox(); |
DeviseField textRemiseHT = new DeviseField(); |
final JPanel panelPoids = new JPanel(new GridBagLayout()); |
GridBagConstraints cPort = new DefaultGridBagConstraints(); |
if (getTable().contains("PORT_HT")) { |
// Port HT |
addSQLObject(textPortHT, "PORT_HT"); |
cPort.gridx = 0; |
cPort.weightx = 0; |
panelPoids.add(new JLabel(getLabelFor("PORT_HT")), cPort); |
c2.gridx = 0; |
c2.gridy++; |
c2.weightx = 0; |
column2.add(new JLabel(getLabelFor("PORT_HT"), SwingConstants.RIGHT), c2); |
textPortHT.setHorizontalAlignment(JTextField.RIGHT); |
cPort.gridx++; |
cPort.weightx = 1; |
panelPoids.add(textPortHT, cPort); |
cPort.gridy++; |
cPort.gridx = 0; |
cPort.weightx = 0; |
c2.gridx++; |
c2.weightx = 1; |
column2.add(textPortHT, c2); |
// TVA sur port |
c2.gridy++; |
c2.gridx = 0; |
c2.weightx = 0; |
addRequiredSQLObject(comboTaxePort, "ID_TAXE_PORT"); |
panelPoids.add(new JLabel(getLabelFor("ID_TAXE_PORT")), cPort); |
cPort.gridx++; |
cPort.weightx = 0; |
panelPoids.add(comboTaxePort, cPort); |
c.gridx++; |
c.gridy = 0; |
c.weightx = 0; |
c.weighty = 0; |
c.gridwidth = 1; |
c.gridheight = 2; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.NORTHEAST; |
panel.add(panelPoids, c); |
DefaultGridBagConstraints.lockMinimumSize(panelPoids); |
column2.add(new JLabel(getLabelFor("ID_TAXE_PORT"), SwingConstants.RIGHT), c2); |
c2.gridx++; |
c2.weightx = 0; |
column2.add(comboTaxePort, c2); |
// Remise HT |
addSQLObject(textRemiseHT, "REMISE_HT"); |
cPort.gridy++; |
cPort.gridx = 0; |
cPort.fill = GridBagConstraints.NONE; |
cPort.weightx = 0; |
panelPoids.add(new JLabel(getLabelFor("REMISE_HT")), cPort); |
c2.gridx = 0; |
c2.gridy++; |
c2.weightx = 0; |
column2.add(new JLabel(getLabelFor("REMISE_HT"), SwingConstants.RIGHT), c2); |
textRemiseHT.setHorizontalAlignment(JTextField.RIGHT); |
cPort.gridx++; |
cPort.weightx = 1; |
panelPoids.add(textRemiseHT, cPort); |
c2.gridx++; |
c2.weightx = 1; |
column2.add(textRemiseHT, c2); |
} |
// Total |
final JTextField textTvaAdujs; |
if (getTable().contains("TVA_ADJUSTMENT")) { |
textTvaAdujs = new JTextField(15); |
final JLabel labelTvaAdujst = new JLabel(getLabelFor("TVA_ADJUSTMENT"), SwingConstants.RIGHT); |
c2.gridx = 0; |
c2.gridy++; |
c2.weightx = 0; |
column2.add(labelTvaAdujst, c2); |
c2.gridx++; |
c2.weightx = 1; |
column2.add(textTvaAdujs, c2); |
addView(textTvaAdujs, "TVA_ADJUSTMENT"); |
DefaultGridBagConstraints.lockMinimumSize(textTvaAdujs); |
} else { |
textTvaAdujs = null; |
} |
c2.gridy++; |
c2.gridx = 0; |
column2.add(new JLabel("Avoirs", SwingConstants.RIGHT), c2); |
c2.gridx++; |
c2.fill = GridBagConstraints.NONE; |
c2.anchor = GridBagConstraints.EAST; |
column2.add(createPanelAvoir(), c2); |
c2.gridy++; |
column2.add(getModuleTotalPanel(), c2); |
c2.gridy++; |
JPanel filler = new JPanel(); |
filler.setOpaque(false); |
c2.weighty = 1; |
column2.add(filler, c2); |
// Colonne 4 Total |
DeviseField fieldHT = new DeviseField(); |
DeviseField fieldEco = new DeviseField(); |
DeviseField fieldTVA = new DeviseField(); |
552,7 → 649,7 |
DeviseField fieldService = new DeviseField(); |
fieldHT.setOpaque(false); |
fieldTVA.setOpaque(false); |
fieldTTC.setOpaque(false); |
this.fieldTTC.setOpaque(false); |
fieldService.setOpaque(false); |
addRequiredSQLObject(fieldDevise, "T_DEVISE"); |
addRequiredSQLObject(fieldEco, "T_ECO_CONTRIBUTION"); |
559,10 → 656,10 |
addRequiredSQLObject(fieldHT, "T_HT"); |
addRequiredSQLObject(fieldTVA, "T_TVA"); |
addRequiredSQLObject(fieldTTC, "T_TTC"); |
addRequiredSQLObject(this.fieldTTC, "T_TTC"); |
addRequiredSQLObject(fieldService, "T_SERVICE"); |
fieldTTC.getDocument().addDocumentListener(new SimpleDocumentListener() { |
this.fieldTTC.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
refreshText(); |
578,21 → 675,9 |
this.allowEditable("T_SERVICE", false); |
this.allowEditable("T_POIDS", false); |
final TotalPanel totalTTC = new TotalPanel(this.table, fieldEco, fieldHT, fieldTVA, fieldTTC, textPortHT, textRemiseHT, fieldService, null, fieldDevise, null, null, |
final TotalPanel totalTTC = new TotalPanel(this.table, fieldEco, fieldHT, fieldTVA, this.fieldTTC, textPortHT, textRemiseHT, fieldService, null, fieldDevise, null, null, |
(getTable().contains("ID_TAXE_PORT") ? comboTaxePort : null), null); |
if (getTable().contains("TVA_ADJUSTMENT")) { |
final JTextField textTvaAdujs = new JTextField(15); |
JLabel labelTvaAdujst = new JLabel(getLabelFor("TVA_ADJUSTMENT")); |
labelTvaAdujst.setHorizontalAlignment(SwingConstants.RIGHT); |
cPort.gridx = 0; |
cPort.gridy++; |
panelPoids.add(labelTvaAdujst, cPort); |
cPort.gridx++; |
panelPoids.add(textTvaAdujs, cPort); |
addView(textTvaAdujs, "TVA_ADJUSTMENT"); |
if (textTvaAdujs != null) { |
totalTTC.setTextFixTVA(textTvaAdujs); |
textTvaAdujs.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
621,44 → 706,23 |
totalTTC.updateTotal(); |
} |
}); |
DefaultGridBagConstraints.lockMinimumSize(textTvaAdujs); |
} |
c.gridx++; |
c.gridy--; |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.gridheight = 2; |
c.gridy = 0; |
c.gridwidth = 1; |
c.gridheight = 1; |
c.anchor = GridBagConstraints.NORTHEAST; |
c.fill = GridBagConstraints.BOTH; |
c.fill = GridBagConstraints.HORIZONTAL; |
c.weighty = 0; |
DefaultGridBagConstraints.lockMinimumSize(totalTTC); |
panel.add(totalTTC, c); |
c.gridy += 3; |
c.gridheight = 1; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.EAST; |
panel.add(createPanelAvoir(), c); |
c.gridy += 4; |
c.gridheight = 2; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.EAST; |
panel.add(getModuleTotalPanel(), c); |
table.getModel().addTableModelListener(new TableModelListener() { |
public void tableChanged(TableModelEvent e) { |
textPoidsTotal.setText(String.valueOf(table.getPoidsTotal())); |
} |
}); |
this.fourn.addModelListener("wantedID", new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
final SQLRow selectedRow2 = fourn.getSelectedRow(); |
final SQLRow selectedRow2 = FactureFournisseurSQLComponent.this.fourn.getSelectedRow(); |
if (selectedRow2 != null && !selectedRow2.isUndefined()) { |
totalTTC.setIntraComm(selectedRow2.getBoolean("UE")); |
} else { |
686,7 → 750,6 |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
// TODO Raccord de méthode auto-généré |
totalTTC.updateTotal(); |
} |
}); |
717,6 → 780,24 |
public int insert(SQLRow order) { |
final SQLTable tableNum = getTable().getTable("NUMEROTATION_AUTO"); |
// incrémentation du numéro auto |
if (tableNum.contains("FACTURE_FOURNISSEUR_START") && NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date()).equalsIgnoreCase(this.numero.getText().trim())) { |
SQLRowValues rowVals = new SQLRowValues(tableNum); |
final SQLRow rowNumAuto = tableNum.getRow(2); |
if (rowNumAuto.getObject("FACTURE_FOURNISSEUR_START") != null) { |
int val = rowNumAuto.getInt("FACTURE_FOURNISSEUR_START"); |
val++; |
rowVals.put("FACTURE_FOURNISSEUR_START", new Integer(val)); |
try { |
rowVals.update(2); |
} catch (SQLException e) { |
e.printStackTrace(); |
} |
} |
} |
int idFacture = getSelectedID(); |
idFacture = super.insert(order); |
this.table.updateField("ID_FACTURE_FOURNISSEUR", idFacture); |
774,12 → 855,16 |
} |
public void commitAvoir(SQLRow rowFactureOld, SQLRow rowFacture) { |
try { |
if (rowFactureOld != null && rowFactureOld.getObject("ID_AVOIR_FOURNISSEUR") != null && !rowFactureOld.isForeignEmpty("ID_AVOIR_FOURNISSEUR") |
&& (rowFacture.getObject("ID_AVOIR_FOURNISSEUR") == null || rowFacture.isForeignEmpty("ID_AVOIR_FOURNISSEUR"))) { |
List<String> fieldsAvoir = Arrays.asList("ID_AVOIR_FOURNISSEUR", "ID_AVOIR_FOURNISSEUR_2"); |
for (String field : fieldsAvoir) { |
SQLRow rowAvoir = rowFactureOld.getForeignRow("ID_AVOIR_FOURNISSEUR"); |
if (rowFactureOld != null && rowFactureOld.getObject(field) != null && !rowFactureOld.isForeignEmpty(field) |
&& (rowFacture.getObject(field) == null || rowFacture.isForeignEmpty(field))) { |
SQLRow rowAvoir = rowFactureOld.getForeignRow(field); |
SQLRowValues rowVals = rowAvoir.createEmptyUpdateRow(); |
// Soldé |
790,9 → 875,9 |
} |
// on solde l'avoir |
if (rowFacture.getObject("ID_AVOIR_FOURNISSEUR") != null && !rowFacture.isForeignEmpty("ID_AVOIR_FOURNISSEUR")) { |
if (rowFacture.getObject(field) != null && !rowFacture.isForeignEmpty(field)) { |
SQLRow rowAvoir = rowFacture.getForeignRow("ID_AVOIR_FOURNISSEUR"); |
SQLRow rowAvoir = rowFacture.getForeignRow(field); |
SQLRowValues rowVals = rowAvoir.createEmptyUpdateRow(); |
rowVals.put("SOLDE", Boolean.TRUE); |
800,6 → 885,7 |
rowVals.update(); |
} |
} |
} catch (SQLException e) { |
ExceptionHandler.handle("Erreur lors la mise à jour de l'avoir associée!", e); |
} |
829,6 → 915,11 |
if (rowsComm != null) { |
rowVals.put("ID_COMMERCIAL", rowsComm.getID()); |
} |
if (getTable().getTable("NUMEROTATION_AUTO").contains("FACTURE_FOURNISSEUR_START")) { |
rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), new Date())); |
} |
rowVals.put("T_HT", Long.valueOf(0)); |
rowVals.put("T_SERVICE", Long.valueOf(0)); |
rowVals.put("T_DEVISE", Long.valueOf(0)); |
871,19 → 962,43 |
cA.gridx++; |
cA.weightx = 0; |
panelAvoir.add(this.textNetAPayer, cA); |
addView(textNetAPayer, "NET_A_PAYER"); |
addView(this.textNetAPayer, "NET_A_PAYER"); |
this.textNetAPayer.setHorizontalAlignment(SwingConstants.RIGHT); |
JLabel labelAvoir2 = new JLabel(getLabelFor("ID_AVOIR_FOURNISSEUR_2")); |
labelAvoir.setHorizontalAlignment(SwingConstants.RIGHT); |
cA.gridx = 0; |
cA.gridy++; |
cA.weightx = 1; |
labelAvoir.setHorizontalAlignment(SwingConstants.RIGHT); |
panelAvoir.add(labelAvoir2, cA); |
cA.weightx = 0; |
cA.gridx++; |
this.avoirFourn2 = new ElementComboBox(); |
this.avoirFourn2.setAddIconVisible(false); |
panelAvoir.add(this.avoirFourn2, cA); |
addView(this.avoirFourn2, "ID_AVOIR_FOURNISSEUR_2"); |
addView(this.avoirFourn, "ID_AVOIR_FOURNISSEUR"); |
addView(avoirTTC, "AVOIR_TTC"); |
this.avoirFourn.addValueListener(new PropertyChangeListener() { |
addView(this.avoirTTC, "AVOIR_TTC"); |
this.avoirFourn.addModelListener("wantedID", new PropertyChangeListener() { |
public void propertyChange(PropertyChangeEvent evt) { |
if (!isFilling()) { |
refreshText(); |
} |
} |
}); |
this.avoirFourn2.addModelListener("wantedID", new PropertyChangeListener() { |
public void propertyChange(PropertyChangeEvent evt) { |
if (!isFilling()) { |
refreshText(); |
} |
} |
}); |
return panelAvoir; |
} |
891,16 → 1006,16 |
Number n = this.fieldTTC.getValue(); |
long totalAvoirTTC = 0; |
long netAPayer = 0; |
long ttc = 0; |
if (n != null) { |
netAPayer = n.longValue(); |
ttc = n.longValue(); |
} |
if (this.avoirFourn.getSelectedId() > 1) { |
List<ElementComboBox> boxAvoir = Arrays.asList(this.avoirFourn, this.avoirFourn2); |
for (ElementComboBox elementComboBox : boxAvoir) { |
if (elementComboBox.getWantedID() > 1) { |
SQLTable tableAvoir = getTable().getForeignTable("ID_AVOIR_FOURNISSEUR"); |
if (n != null) { |
SQLRow rowAvoir = tableAvoir.getRow(this.avoirFourn.getSelectedId()); |
SQLRow rowAvoir = tableAvoir.getRow(elementComboBox.getWantedID()); |
long totalAvoir = ((Number) rowAvoir.getObject("MONTANT_TTC")).longValue(); |
if (getSelectedID() > 1) { |
SQLRow row = getTable().getRow(getSelectedID()); |
910,10 → 1025,10 |
} |
} |
long l = ttc - totalAvoir; |
long l = netAPayer - totalAvoir; |
if (l < 0) { |
l = 0; |
totalAvoirTTC = ttc; |
totalAvoirTTC = netAPayer; |
} else { |
totalAvoirTTC = totalAvoir; |
} |
920,6 → 1035,7 |
netAPayer = l; |
} |
} |
} |
this.textNetAPayer.setValue(netAPayer); |
this.avoirTTC.setValue(totalAvoirTTC); |
947,15 → 1063,7 |
if (!row.isForeignEmpty("ID_COMPTE_PCE")) { |
rowVals.put("ID_COMPTE_PCE", row.getForeignID("ID_COMPTE_PCE")); |
} |
// if (getTable().contains("ID_NUMEROTATION_AUTO")) { |
// rowVals.put("NUMERO", |
// NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new |
// Date(), row.getForeign("ID_NUMEROTATION_AUTO"))); |
// } else { |
// rowVals.put("NUMERO", |
// NumerotationAutoSQLElement.getNextNumero(SaisieVenteFactureSQLElement.class, new |
// Date())); |
// } |
rowVals.put("NOM", row.getObject("NOM")); |
this.select(rowVals); |
} |
970,6 → 1078,12 |
SQLRowValues rowVals = rowElt.createUpdateRow(); |
rowVals.clearPrimaryKeys(); |
if (rowVals.getTable().contains("ID_COMMANDE_ELEMENT")) { |
rowVals.putEmptyLink("ID_COMMANDE_ELEMENT"); |
} |
if (rowVals.getTable().contains("ID_BON_RECEPTION_ELEMENT")) { |
rowVals.putEmptyLink("ID_BON_RECEPTION_ELEMENT"); |
} |
this.table.getModel().addRow(rowVals); |
int rowIndex = this.table.getModel().getRowCount() - 1; |
this.table.getModel().fireTableModelModified(rowIndex); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/component/SaisieAchatSQLComponent.java |
---|
340,7 → 340,7 |
} |
}); |
this.comboAvoir.addValueListener(new PropertyChangeListener() { |
this.comboAvoir.addModelListener("wantedID", new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
refreshText(); |
534,11 → 534,11 |
private void refreshText() { |
Number n = this.montant.getMontantTTC().getValue(); |
if (this.comboAvoir.getSelectedId() > 1) { |
if (this.comboAvoir.getWantedID() > 1) { |
SQLTable tableAvoir = Configuration.getInstance().getDirectory().getElement("AVOIR_FOURNISSEUR").getTable(); |
if (n != null) { |
long ttc = n.longValue(); |
SQLRow rowAvoir = tableAvoir.getRow(this.comboAvoir.getSelectedId()); |
SQLRow rowAvoir = tableAvoir.getRow(this.comboAvoir.getWantedID()); |
long totalAvoir = ((Number) rowAvoir.getObject("MONTANT_TTC")).longValue(); |
this.fieldMontantRegle.setValue(ttc - totalAvoir); |
} else { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/component/CommandeSQLComponent.java |
---|
95,19 → 95,19 |
public class CommandeSQLComponent extends TransfertBaseSQLComponent { |
private CommandeItemTable table = new CommandeItemTable(); |
private PanelOOSQLComponent panelOO; |
protected CommandeItemTable table = new CommandeItemTable(); |
protected PanelOOSQLComponent panelOO; |
private JUniqueTextField numeroUniqueCommande; |
private final SQLTable tableNum = getTable().getBase().getTable("NUMEROTATION_AUTO"); |
private final ITextArea infos = new ITextArea(3, 3); |
private ElementComboBox fourn = new ElementComboBox(); |
private final JCheckBox boxLivrClient = new JCheckBox("Livrer directement le client"); |
private DefaultElementSQLObject compAdr; |
final JPanel panelAdrSpec = new JPanel(new GridBagLayout()); |
protected JUniqueTextField numeroUniqueCommande; |
protected final SQLTable tableNum = getTable().getBase().getTable("NUMEROTATION_AUTO"); |
protected final ITextArea infos = new ITextArea(3, 3); |
protected ElementComboBox fourn = new ElementComboBox(); |
protected final JCheckBox boxLivrClient = new JCheckBox("Livrer directement le client"); |
protected DefaultElementSQLObject compAdr; |
protected final JPanel panelAdrSpec = new JPanel(new GridBagLayout()); |
protected ElementComboBox boxAdr; |
private JDate dateCommande = new JDate(true); |
private ElementSQLObject componentPrincipaleAdr; |
protected JDate dateCommande = new JDate(true); |
protected ElementSQLObject componentPrincipaleAdr; |
public CommandeSQLComponent() { |
super(Configuration.getInstance().getDirectory().getElement("COMMANDE")); |
571,7 → 571,7 |
c.anchor = GridBagConstraints.EAST; |
this.add(new JLabel(getLabelFor("NOM"), SwingConstants.RIGHT), c); |
final JTextField textNom = new JTextField(); |
final SQLTextCombo textNom = new SQLTextCombo(); |
c.gridx++; |
c.weightx = 1; |
this.add(textNom, c); |
653,6 → 653,7 |
DefaultGridBagConstraints.lockMinimumSize(this.fourn); |
DefaultGridBagConstraints.lockMinimumSize(commSel); |
this.addView(this.table.getRowValuesTable(), ""); |
} |
protected SQLRowValues getLivraisonAdr(SQLRow rowAffaire) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/table/FacturationCommandeTable.java |
---|
20,6 → 20,7 |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.UndefinedRowValuesCache; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.request.ComboSQLRequest; |
32,6 → 33,7 |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.table.PercentTableCellRenderer; |
import org.openconcerto.ui.table.TimestampTableCellEditor; |
import org.openconcerto.ui.table.XTableColumnModel; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
40,7 → 42,9 |
import java.math.BigDecimal; |
import java.sql.Date; |
import java.sql.Timestamp; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import java.util.Vector; |
import javax.swing.JButton; |
55,6 → 59,12 |
private RowValuesTableModel model; |
private SQLComponent comp; |
public static Map<String, Boolean> map = new HashMap<String, Boolean>(); |
protected Map<String, Boolean> getCustomVisibilityMap() { |
return map; |
} |
public FacturationCommandeTable(SQLComponent comp) { |
this.comp = comp; |
init(); |
89,6 → 99,7 |
final SQLTableElement comptant = new SQLTableElement(e.getTable().getField("COMPTANT")); |
list.add(comptant); |
// TODO fix return value of timestamp if not show hour return date object |
final SQLTableElement date = new SQLTableElement(e.getTable().getField("DATE_PREVISIONNELLE"), Date.class, new TimestampTableCellEditor(false) { |
@Override |
public Object getCellEditorValue() { |
110,30 → 121,21 |
ToolTipManager.sharedInstance().unregisterComponent(this.table); |
ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader()); |
// Autocompletion |
// AutoCompletionManager m = new AutoCompletionManager(tableElementNom, |
// ((ComptaPropsConfiguration) |
// Configuration.getInstance()).getSQLBaseSociete().getField("ECHANTILLON.NOM"), this.table, |
// this.table.getRowValuesTableModel()); |
// m.fill("NOM", "NOM"); |
// m.fill("PV_HT", "PV_HT"); |
Map<String, Boolean> mapCustom = getCustomVisibilityMap(); |
if (mapCustom != null) { |
for (String string : mapCustom.keySet()) { |
setColumnVisible(model.getColumnForField(string), mapCustom.get(string)); |
} |
} |
// // Calcul automatique du total HT |
// qteElement.addModificationListener(this.totalHT); |
// this.pvHT.addModificationListener(this.totalHT); |
// this.totalHT.setModifier(new CellDynamicModifier() { |
// public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) { |
// System.out.println("Compute totalHT"); |
// |
// int qte = Integer.parseInt(row.getObject("QTE").toString()); |
// BigDecimal f = row.getBigDecimal("PV_HT"); |
// BigDecimal r = f.multiply(new BigDecimal(qte), DecimalUtils.HIGH_PRECISION); |
// return r; |
// } |
// |
// }); |
} |
protected void setColumnVisible(int col, boolean visible) { |
if (col >= 0) { |
XTableColumnModel columnModel = this.table.getColumnModel(); |
columnModel.setColumnVisible(columnModel.getColumnByModelIndex(col), visible); |
} |
} |
/** |
* |
152,7 → 154,7 |
this.add(new JLabel("Ajouter un terme"), c); |
final ElementComboBox boxCat = new ElementComboBox(); |
final SQLElement element = Configuration.getInstance().getDirectory().getElement("FACTURATION_COMMANDE_CLIENT"); |
final SQLElement element = getSQLElement(); |
ComboSQLRequest req = element.getComboRequest(true); |
req.setWhere(new Where(element.getTable().getField("CHOICE"), "=", Boolean.TRUE)); |
boxCat.init(element, req); |
178,10 → 180,13 |
return; |
} |
SQLRowValues rowVals = new SQLRowValues(Configuration.getInstance().getBase().getTable("FACTURATION_COMMANDE_CLIENT")); |
if (comp.getSelectedID() > 1) { |
final SQLTable table2 = getSQLElement().getTable(); |
SQLRowValues rowVals = new SQLRowValues(table2); |
if (table2.getName().equals("FACTURATION_COMMANDE_CLIENT")) { |
if (comp != null && comp.getSelectedID() > 1) { |
rowVals.put("ID_COMMANDE_CLIENT", comp.getSelectedID()); |
} |
} |
rowVals.put("NOM", rowCat.getObject("NOM")); |
rowVals.put("ID_TYPE_REGLEMENT", rowCat.getObject("ID_TYPE_REGLEMENT")); |
rowVals.put("AJOURS", rowCat.getObject("AJOURS")); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/table/ChiffrageCommandeTable.java |
---|
28,6 → 28,7 |
import org.openconcerto.sql.view.list.RowValuesTableRenderer; |
import org.openconcerto.sql.view.list.SQLTableElement; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.table.XTableColumnModel; |
import org.openconcerto.utils.DecimalUtils; |
import java.awt.GridBagConstraints; |
36,7 → 37,9 |
import java.math.BigDecimal; |
import java.util.ArrayList; |
import java.util.Arrays; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import java.util.Vector; |
import javax.swing.AbstractAction; |
80,7 → 83,9 |
final SQLField fieldHA = e.getTable().getField("PA_HT"); |
final DeviseNumericCellEditor editorPAHT = new DeviseNumericCellEditor(fieldHA); |
final SQLTableElement pa = new SQLTableElement(fieldHA, BigDecimal.class, editorPAHT); |
pa.setRenderer(new DeviseTableCellRenderer()); |
DeviseTableCellRenderer renderer = new DeviseTableCellRenderer(); |
renderer.setHideZeroValue(true); |
pa.setRenderer(renderer); |
if (e.getTable().contains("ID_CATEGORIE_HEURE")) { |
pa.setEditable(false); |
} |
89,7 → 94,7 |
final SQLField fieldPV = e.getTable().getField("PV_HT"); |
final DeviseNumericCellEditor editorPVHT = new DeviseNumericCellEditor(fieldPV); |
final SQLTableElement pv = new SQLTableElement(fieldPV, BigDecimal.class, editorPVHT); |
pv.setRenderer(new DeviseTableCellRenderer()); |
pv.setRenderer(renderer); |
list.add(pv); |
SQLTableElement qteU = new SQLTableElement(e.getTable().getField("QTE"), BigDecimal.class) { |
98,7 → 103,7 |
return BigDecimal.ZERO; |
} |
}; |
qteU.setRenderer(new DeviseTableCellRenderer()); |
qteU.setRenderer(renderer); |
list.add(qteU); |
if (e.getTable().contains("ANT")) { |
108,7 → 113,7 |
return BigDecimal.ZERO; |
} |
}; |
ant.setRenderer(new DeviseTableCellRenderer()); |
ant.setRenderer(renderer); |
list.add(ant); |
} |
119,7 → 124,7 |
return BigDecimal.ZERO; |
} |
}; |
restant.setRenderer(new DeviseTableCellRenderer()); |
restant.setRenderer(renderer); |
list.add(restant); |
} |
129,7 → 134,7 |
final SQLField fieldTotalHA = e.getTable().getField("T_PA_HT"); |
final DeviseNumericCellEditor editorTotalPAHT = new DeviseNumericCellEditor(fieldTotalHA); |
final SQLTableElement totalpa = new SQLTableElement(fieldTotalHA, BigDecimal.class, editorTotalPAHT); |
totalpa.setRenderer(new DeviseTableCellRenderer()); |
totalpa.setRenderer(renderer); |
totalpa.setEditable(false); |
list.add(totalpa); |
137,7 → 142,7 |
final DeviseNumericCellEditor editorTotalPVHT = new DeviseNumericCellEditor(fieldTotalPV); |
final SQLTableElement totalpv = new SQLTableElement(fieldTotalPV, BigDecimal.class, editorTotalPVHT); |
totalpv.setEditable(false); |
totalpv.setRenderer(new DeviseTableCellRenderer()); |
totalpv.setRenderer(renderer); |
list.add(totalpv); |
final SQLField fieldMarge = e.getTable().getField("MARGE"); |
144,7 → 149,7 |
final DeviseNumericCellEditor editorMarge = new DeviseNumericCellEditor(fieldMarge); |
final SQLTableElement marge = new SQLTableElement(fieldMarge, BigDecimal.class, editorMarge); |
marge.setEditable(false); |
marge.setRenderer(new DeviseTableCellRenderer()); |
marge.setRenderer(renderer); |
list.add(marge); |
SQLRowValues defautRow = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable())); |
154,6 → 159,17 |
ToolTipManager.sharedInstance().unregisterComponent(this.table); |
ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader()); |
this.table.readState(); |
Map<String, Boolean> mapCustom = getCustomVisibilityMap(); |
if (mapCustom != null) { |
for (String string : mapCustom.keySet()) { |
setColumnVisible(model.getColumnForField(string), mapCustom.get(string)); |
} |
} |
this.table.writeState(); |
// Autocompletion |
// AutoCompletionManager m = new AutoCompletionManager(tableElementNom, |
// ((ComptaPropsConfiguration) |
214,6 → 230,19 |
}); |
} |
protected void setColumnVisible(int col, boolean visible) { |
if (col >= 0) { |
XTableColumnModel columnModel = this.table.getColumnModel(); |
columnModel.setColumnVisible(columnModel.getColumnByModelIndex(col), visible); |
} |
} |
public static Map<String, Boolean> map = new HashMap<String, Boolean>(); |
protected Map<String, Boolean> getCustomVisibilityMap() { |
return map; |
} |
/** |
* |
*/ |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/element/CommandeSQLElement.java |
---|
16,6 → 16,7 |
import org.openconcerto.erp.config.Gestion; |
import org.openconcerto.erp.core.common.component.TransfertBaseSQLComponent; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.edm.AttachmentAction; |
import org.openconcerto.erp.core.supplychain.order.component.CommandeSQLComponent; |
import org.openconcerto.erp.core.supplychain.order.component.SaisieAchatSQLComponent; |
import org.openconcerto.erp.core.supplychain.receipt.component.BonReceptionSQLComponent; |
62,6 → 63,12 |
public CommandeSQLElement() { |
super("COMMANDE", "une commande fournisseur", "commandes fournisseur"); |
if (getTable().contains("ATTACHMENTS")) { |
PredicateRowAction actionAttachment = new PredicateRowAction(new AttachmentAction().getAction(), true); |
actionAttachment.setPredicate(IListeEvent.getSingleSelectionPredicate()); |
getRowActions().add(actionAttachment); |
} |
getRowActions().addAll(new MouseSheetXmlListeListener(CommandeXmlSheet.class).getRowActions()); |
// Transfert vers BR |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/supplychain/order/element/FactureFournisseurSQLElement.java |
---|
14,6 → 14,7 |
package org.openconcerto.erp.core.supplychain.order.element; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement; |
import org.openconcerto.erp.core.edm.AttachmentAction; |
import org.openconcerto.erp.core.supplychain.order.component.FactureFournisseurSQLComponent; |
import org.openconcerto.erp.generationDoc.gestcomm.FactureFournisseurXmlSheet; |
21,6 → 22,7 |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.model.FieldPath; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.graph.Path; |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.sql.view.EditPanel; |
74,7 → 76,12 |
} |
}; |
getRowActions().add(actionClone); |
final SQLTable tableNum = getTable().getTable("NUMEROTATION_AUTO"); |
// incrémentation du numéro auto |
if (tableNum.contains("FACTURE_FOURNISSEUR_START")) { |
NumerotationAutoSQLElement.addClass(this.getClass(), "FACTURE_FOURNISSEUR"); |
} |
} |
@Override |
public Set<String> getReadOnlyFields() { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/RelanceSQLElement.java |
---|
15,7 → 15,14 |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement; |
import org.openconcerto.erp.config.Log; |
import org.openconcerto.erp.core.common.ui.DeviseField; |
import org.openconcerto.erp.core.sales.invoice.element.SaisieVenteFactureSQLElement; |
import org.openconcerto.erp.core.sales.invoice.report.VenteFactureXmlSheet; |
import org.openconcerto.erp.generationDoc.A4; |
import org.openconcerto.erp.generationDoc.ProgressPrintingFrame; |
import org.openconcerto.erp.generationDoc.gestcomm.FicheRelanceSheet; |
import org.openconcerto.erp.generationDoc.gestcomm.RelanceSheet; |
import org.openconcerto.erp.preferences.PrinterNXProps; |
import org.openconcerto.sql.element.BaseSQLComponent; |
29,6 → 36,8 |
import org.openconcerto.sql.sqlobject.JUniqueTextField; |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.sql.view.list.IListe; |
import org.openconcerto.sql.view.list.RowAction; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.ui.component.ITextArea; |
import org.openconcerto.ui.component.InteractionMode; |
36,23 → 45,160 |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.Window; |
import java.awt.event.ActionEvent; |
import java.awt.print.Paper; |
import java.awt.print.PrinterException; |
import java.awt.print.PrinterJob; |
import java.sql.SQLException; |
import java.util.ArrayList; |
import java.util.Calendar; |
import java.util.List; |
import java.util.logging.Level; |
import javax.print.PrintService; |
import javax.print.attribute.Attribute; |
import javax.print.attribute.HashPrintRequestAttributeSet; |
import javax.print.attribute.Size2DSyntax; |
import javax.print.attribute.standard.Copies; |
import javax.print.attribute.standard.MediaPrintableArea; |
import javax.print.attribute.standard.MediaSizeName; |
import javax.swing.AbstractAction; |
import javax.swing.JCheckBox; |
import javax.swing.JLabel; |
import javax.swing.JPanel; |
import javax.swing.JSeparator; |
import javax.swing.SwingUtilities; |
import javax.swing.JOptionPane; |
import javax.swing.SwingUtilities; |
public class RelanceSQLElement extends ComptaSQLConfElement { |
public static final String ITEM_TYPE = "type.id"; |
public static final String ITEM_DATE = "date"; |
public static final String ITEM_NUMBER = "number"; |
public static final String ITEM_CUSTOMER = "customer.id"; |
public static final String ITEM_SALES_INVOICE_INPUT = "sales.invoice.input.id"; |
public static final String ITEM_AMOUNT = "amount"; |
public static final String ITEM_INFORMATIONS = "informations"; |
public static final String ITEM_VISUALIZATION = "visualization"; |
public static final String ITEM_PRINT = "impression"; |
private static final double POINTS_PER_INCH = 72.0; |
public RelanceSQLElement() { |
super("RELANCE", "une relance client", "relances clients"); |
RowAction actionShowDoc = new RowAction(new AbstractAction("Voir le document") { |
public void actionPerformed(ActionEvent e) { |
final RelanceSheet s = new RelanceSheet(IListe.get(e).getSelectedRow().asRow().fetchNew(false)); |
s.generate(false, false, ""); |
s.showDocument(); |
} |
}, false) { |
@Override |
public boolean enabledFor(List<SQLRowValues> selection) { |
if (selection.size() == 1) { |
SQLRowValues rowRelance = selection.get(0); |
boolean isNotMail = !(rowRelance.getForeign("ID_TYPE_LETTRE_RELANCE") == null || rowRelance.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")); |
return isNotMail; |
} |
return false; |
} |
}; |
getRowActions().add(actionShowDoc); |
RowAction actionPrintDoc = new RowAction(new AbstractAction("Imprimer") { |
public void actionPerformed(ActionEvent e) { |
print(e, false); |
} |
}, false) { |
@Override |
public boolean enabledFor(List<SQLRowValues> selection) { |
if (selection.size() >= 1) { |
boolean isNotMail = true; |
for (SQLRowValues rowRelance : selection) { |
isNotMail &= !(rowRelance.getForeign("ID_TYPE_LETTRE_RELANCE") == null || rowRelance.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")); |
} |
return isNotMail; |
} |
return false; |
} |
}; |
getRowActions().add(actionPrintDoc); |
// Impression |
RowAction actionPrintDocFact = new RowAction(new AbstractAction("Imprimer avec la facture") { |
public void actionPerformed(ActionEvent e) { |
print(e, true); |
} |
}, false) { |
@Override |
public boolean enabledFor(List<SQLRowValues> selection) { |
if (selection.size() >= 1) { |
boolean isNotMail = true; |
for (SQLRowValues rowRelance : selection) { |
isNotMail &= !(rowRelance.getForeign("ID_TYPE_LETTRE_RELANCE") == null || rowRelance.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")); |
} |
return isNotMail; |
} |
return false; |
} |
}; |
getRowActions().add(actionPrintDocFact); |
// Générer |
RowAction actionGen = new RowAction(new AbstractAction("Générer le document") { |
public void actionPerformed(ActionEvent e) { |
for (SQLRowValues rowVals : IListe.get(e).getSelectedRows()) { |
final RelanceSheet s = new RelanceSheet(rowVals.asRow().fetchNew(false)); |
String printer = PrinterNXProps.getInstance().getStringProperty("RelancePrinter"); |
s.generate(false, true, printer, true); |
s.showDocument(); |
} |
} |
}, false) { |
@Override |
public boolean enabledFor(List<SQLRowValues> selection) { |
if (selection.size() >= 1) { |
SQLRowValues rowRelance = selection.get(0); |
boolean isNotMail = !(rowRelance.getForeign("ID_TYPE_LETTRE_RELANCE") == null || rowRelance.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")); |
return isNotMail; |
} |
return false; |
} |
}; |
getRowActions().add(actionGen); |
RowAction actionFiche = new RowAction(new AbstractAction("Créer la fiche de relance") { |
public void actionPerformed(ActionEvent e) { |
try { |
FicheRelanceSheet sheet = new FicheRelanceSheet(IListe.get(e).getSelectedRow().asRow().fetchNew(false)); |
sheet.createDocumentAsynchronous(); |
sheet.showPrintAndExportAsynchronous(true, false, true); |
} catch (Exception ex) { |
ExceptionHandler.handle("Impression impossible", ex); |
} |
} |
}, false) { |
@Override |
public boolean enabledFor(List<SQLRowValues> selection) { |
return (selection.size() == 1); |
} |
}; |
getRowActions().add(actionFiche); |
} |
protected List<String> getListFields() { |
final List<String> l = new ArrayList<String>(); |
l.add("NUMERO"); |
302,4 → 448,103 |
protected String createCode() { |
return this.createCodeOfPackage() + ".chaseletter"; |
} |
public void print(final ActionEvent ev, boolean withInvoice) { |
// |
final IListe ilist = IListe.get(ev); |
String printerName = PrinterNXProps.getInstance().getStringProperty("RelancePrinter"); |
// Printer configuration |
final PrinterJob printJob = PrinterJob.getPrinterJob(); |
// Set the printer |
PrintService myService = null; |
if (printerName != null && printerName.trim().length() > 0) { |
final PrintService[] services = PrinterJob.lookupPrintServices(); |
for (int i = 0; i < services.length; i++) { |
if (services[i].getName().equals(printerName)) { |
myService = services[i]; |
break; |
} |
} |
if (myService != null) { |
try { |
printJob.setPrintService(myService); |
} catch (PrinterException e) { |
Log.get().log(Level.SEVERE, "cannot print", e); |
JOptionPane.showMessageDialog(null, "Imprimante non compatible"); |
return; |
} |
} |
} |
final HashPrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); |
// L'impression est forcée en A4, sur OpenSuse le format est en |
// Letter par défaut alors que l'imprimante est en A4 dans le système |
final MediaSizeName media = MediaSizeName.ISO_A4; |
attributes.add(media); |
Paper paper = new A4(0, 0); |
final MediaPrintableArea printableArea = new MediaPrintableArea((float) (paper.getImageableX() / POINTS_PER_INCH), (float) (paper.getImageableY() / POINTS_PER_INCH), |
(float) (paper.getImageableWidth() / POINTS_PER_INCH), (float) (paper.getImageableHeight() / POINTS_PER_INCH), Size2DSyntax.INCH); |
attributes.add(printableArea); |
attributes.add(new Copies(1)); |
boolean okToPrint = printJob.printDialog(attributes); |
final Attribute attribute = attributes.get(Copies.class); |
if (attribute != null) { |
final Copies attributeCopies = (Copies) attribute; |
final int value = attributeCopies.getValue(); |
printJob.setCopies(value); |
} else { |
printJob.setCopies(1); |
} |
if (okToPrint) { |
Window w = SwingUtilities.getWindowAncestor(ilist); |
final ProgressPrintingFrame pFrame = new ProgressPrintingFrame(w, printJob, "Impression", "Impression en cours", 300); |
// Génération + impression |
final List<SQLRowValues> rows = IListe.get(ev).getSelectedRows(); |
final Thread thread = new Thread() { |
@Override |
public void run() { |
final int size = rows.size(); |
for (int i = 0; i < size; i++) { |
final int index = i; |
SwingUtilities.invokeLater(new Runnable() { |
@Override |
public void run() { |
pFrame.setMessage("Document " + (index + 1) + "/" + size); |
pFrame.setProgress((100 * (index + 1)) / size); |
} |
}); |
if (!pFrame.isCancelled()) { |
SQLRowValues r = rows.get(i); |
SQLRow rowRelance = r.asRow().fetchNew(false); |
RelanceSheet s = new RelanceSheet(rowRelance); |
s.printDocument(printJob); |
if (withInvoice) { |
SaisieVenteFactureSQLElement element = getDirectory().getElement(SaisieVenteFactureSQLElement.class); |
final VenteFactureXmlSheet sheet = new VenteFactureXmlSheet(rowRelance.getForeignRow("ID_SAISIE_VENTE_FACTURE")); |
try { |
sheet.getOrCreateDocumentFile(); |
sheet.printDocument(printJob); |
} catch (Exception e) { |
ExceptionHandler.handle("Erreur lors de la création de la facture", e); |
} |
} |
} |
} |
} |
}; |
thread.setPriority(Thread.MIN_PRIORITY); |
thread.setDaemon(true); |
pFrame.setLocationRelativeTo(ilist); |
pFrame.setVisible(true); |
thread.start(); |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/CustomerSQLComponent.java |
---|
18,6 → 18,7 |
import org.openconcerto.erp.core.customerrelationship.customer.ui.AdresseClientItemTable; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.sales.product.element.ClientCodeArticleTable; |
import org.openconcerto.erp.core.sales.product.ui.CustomerProductFamilyQtyPriceListTable; |
import org.openconcerto.erp.core.sales.product.ui.CustomerProductQtyPriceListTable; |
import org.openconcerto.erp.preferences.GestionCommercialeGlobalPreferencePanel; |
import org.openconcerto.erp.preferences.ModeReglementDefautPrefPanel; |
42,7 → 43,10 |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.sql.view.EditPanel.EditMode; |
import org.openconcerto.sql.view.IListFrame; |
import org.openconcerto.sql.view.IListPanel; |
import org.openconcerto.sql.view.ListeAddPanel; |
import org.openconcerto.sql.view.list.IListe; |
import org.openconcerto.sql.view.list.SQLTableModelSource; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.FrameUtil; |
import org.openconcerto.ui.JDate; |
65,6 → 69,7 |
import javax.swing.AbstractAction; |
import javax.swing.Icon; |
import javax.swing.JButton; |
import javax.swing.JCheckBox; |
import javax.swing.JComponent; |
import javax.swing.JLabel; |
95,8 → 100,10 |
}; |
private CustomerProductQtyPriceListTable clienTarifTable = new CustomerProductQtyPriceListTable(); |
private CustomerProductFamilyQtyPriceListTable clienFamilleTarifTable = new CustomerProductFamilyQtyPriceListTable(); |
private SQLRowValues defaultContactRowVals = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(this.contactTable)); |
private JCheckBox checkAdrLivraison, checkAdrFacturation; |
private IListPanel agencePanel; |
public CustomerSQLComponent(SQLElement element) { |
super(element); |
172,10 → 179,34 |
return new JDate(true); |
} else if (id.equals("customerrelationship.customer.contacts")) { |
return this.table; |
} else if (id.equals("customerrelationship.customer.agencies")) { |
SQLElement elementAgence = getElement().getDirectory().getElement("AGENCE"); |
SQLTableModelSource source = elementAgence.createTableSource(Where.FALSE); |
this.agencePanel = new ListeAddPanel(elementAgence, new IListe(source)) { |
@Override |
protected void handleAction(JButton source, ActionEvent evt) { |
if (source == this.buttonAjouter) { |
if (getMode() == Mode.MODIFICATION && getSelectedID() != SQLRow.NONEXISTANT_ID) { |
SQLRowValues rowValsAgency = new SQLRowValues(elementAgence.getTable()); |
rowValsAgency.put("ID_CLIENT", getSelectedID()); |
this.getCreateFrame().getSQLComponent().select(rowValsAgency); |
} |
FrameUtil.show(this.getCreateFrame()); |
} else { |
super.handleAction(source, evt); |
} |
} |
}; |
if (getMode() == Mode.INSERTION || getMode() == Mode.READ_ONLY) { |
this.agencePanel.getButtonAdd().setEnabled(false); |
} |
return this.agencePanel; |
} else if (id.equals("customerrelationship.customer.customproduct")) { |
return this.tableCustomProduct; |
} else if (id.equals("customerrelationship.customer.customtarif")) { |
return this.clienTarifTable; |
} else if (id.equals("customerrelationship.customer.customfamilytarif")) { |
return this.clienFamilleTarifTable; |
} else if (id.equals("customerrelationship.customer.addresses")) { |
return createAdressesComponent(); |
} else if (id.equals("NOM")) { |
253,6 → 284,7 |
final int selectedID = getSelectedID(); |
this.table.updateField("ID_CLIENT", selectedID); |
this.clienTarifTable.updateField("ID_CLIENT", selectedID); |
this.clienFamilleTarifTable.updateField("ID_CLIENT", selectedID); |
this.tableCustomProduct.updateField("ID_CLIENT", selectedID); |
this.adresseTable.updateField("ID_CLIENT", selectedID); |
} |
265,10 → 297,16 |
if (r != null) { |
this.table.insertFrom("ID_CLIENT", r.asRowValues()); |
this.clienTarifTable.insertFrom("ID_CLIENT", r.asRowValues()); |
this.clienFamilleTarifTable.insertFrom("ID_CLIENT", r.asRowValues()); |
this.tableCustomProduct.insertFrom("ID_CLIENT", r.asRowValues()); |
this.adresseTable.insertFrom("ID_CLIENT", r.asRowValues()); |
} |
if (r != null && r.hasID()) { |
this.agencePanel.getListe().getRequest().setWhere(new Where(this.agencePanel.getListe().getRequest().getPrimaryTable().getField("ID_CLIENT"), "=", r.getID())); |
} else { |
this.agencePanel.getListe().getRequest().setWhere(Where.FALSE); |
} |
} |
@Override |
public int insert(SQLRow order) { |
304,6 → 342,8 |
} else { |
id = super.insert(order); |
this.table.updateField("ID_CLIENT", id); |
this.clienTarifTable.updateField("ID_CLIENT", id); |
this.clienFamilleTarifTable.updateField("ID_CLIENT", id); |
this.tableCustomProduct.updateField("ID_CLIENT", id); |
this.clienTarifTable.updateField("ID_CLIENT", id); |
this.adresseTable.updateField("ID_CLIENT", id); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/AgenceSQLElement.java |
---|
New file |
0,0 → 1,108 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.sql.element.ElementSQLObject; |
import org.openconcerto.sql.element.GroupSQLComponent; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.sqlobject.ElementComboBox; |
import org.openconcerto.ui.JLabelBold; |
import org.openconcerto.ui.group.Group; |
import java.util.ArrayList; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
import javax.swing.JComponent; |
import javax.swing.JLabel; |
public class AgenceSQLElement extends SQLElement { |
public AgenceSQLElement(DBRoot root) { |
super(root.findTable("AGENCE")); |
// TODO Auto-generated constructor stub |
} |
@Override |
protected List<String> getListFields() { |
List<String> list = new ArrayList<>(2); |
list.add("DESIGNATION"); |
list.add("ID_CLIENT"); |
list.add("ID_ADRESSE"); |
return list; |
} |
@Override |
public Group getGroupForCreation() { |
// TODO Auto-generated method stub |
return super.getGroupForCreation(); |
} |
@Override |
protected SQLComponent createComponent() { |
return new GroupSQLComponent(this, new AgenceGroup(this.getCode())) { |
@Override |
public JComponent createEditor(String id) { |
if (id.equals("customerrelationship.customer.agency.address")) { |
org.openconcerto.sql.element.ElementSQLObject c = (ElementSQLObject) super.createEditor(id); |
c.setRequired(true); |
return c; |
} |
if (id.equals("customerrelationship.customer.agency.customer")) { |
ElementComboBox compClient = new ElementComboBox(); |
compClient.setVisible(false); |
return compClient; |
} |
return super.createEditor(id); |
} |
@Override |
protected Set<String> createRequiredNames() { |
final Set<String> required = new HashSet<>(); |
required.add("customerrelationship.customer.agency.designation"); |
return required; |
} |
@Override |
public JComponent createLabel(String id) { |
if (id.equals("customerrelationship.customer.agency.customer")) { |
JLabel label = new JLabel(); |
label.setVisible(false); |
return label; |
} |
if (id.equals("customerrelationship.customer.agency.grp1")) { |
JLabel label = new JLabel(); |
label.setVisible(false); |
return label; |
} else if (id.equals("customerrelationship.customer.agency.address")) { |
return new JLabelBold("Adresse de l'agence"); |
} else { |
return super.createLabel(id); |
} |
} |
}; |
} |
@Override |
protected String createCode() { |
return "customerrelationship.customer.agency"; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/CustomerGroup.java |
---|
57,6 → 57,10 |
this.add(gAddress); |
final Group gAgency = new Group("customerrelationship.customer.agency"); |
gAgency.addItem("customerrelationship.customer.agencies", new LayoutHints(true, true, true, true, true, true, true, true)); |
this.add(gAgency); |
final Group gContact = new Group("customerrelationship.customer.contact", LayoutHints.DEFAULT_SEPARATED_GROUP_HINTS); |
gContact.addItem("customerrelationship.customer.contacts", new LayoutHints(true, true, true, true, true, true, true, true)); |
this.add(gContact); |
95,8 → 99,10 |
final Group gCustomProduct = new Group("customerrelationship.customer.customproduct", LayoutHints.DEFAULT_SEPARATED_GROUP_HINTS); |
gCustomProduct.addItem("customerrelationship.customer.customproduct", new LayoutHints(true, true, true, true, true, true, true, true)); |
this.add(gCustomProduct); |
final Group gCustomRemiseProduct = new Group("customerrelationship.customer.customtarif", LayoutHints.DEFAULT_SEPARATED_GROUP_HINTS); |
gCustomRemiseProduct.addItem("customerrelationship.customer.customtarif", new LayoutHints(true, true, true, true, true, true, true, true)); |
gCustomRemiseProduct.addItem("customerrelationship.customer.customfamilytarif", new LayoutHints(true, true, true, true, true, true, true, true)); |
this.add(gCustomRemiseProduct); |
this.add(gState); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/CustomerSQLElement.java |
---|
15,10 → 15,12 |
import org.openconcerto.erp.core.edm.AttachmentAction; |
import org.openconcerto.erp.core.reports.history.ui.HistoriqueClientFrame; |
import org.openconcerto.erp.preferences.GestionCommercialeGlobalPreferencePanel; |
import org.openconcerto.sql.element.GlobalMapper; |
import org.openconcerto.sql.element.GroupSQLComponent; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.preferences.SQLPreferences; |
import org.openconcerto.sql.request.SQLFieldTranslator; |
import org.openconcerto.sql.view.list.IListe; |
import org.openconcerto.sql.view.list.IListeAction.IListeEvent; |
73,6 → 75,11 |
if (getTable().contains("GROUPE")) { |
fields.add("GROUPE"); |
} |
SQLPreferences prefs = new SQLPreferences(getTable().getDBRoot()); |
if (prefs.getBoolean(GestionCommercialeGlobalPreferencePanel.CATEGORIE_COMPTABLE_SPEC, false)) { |
fields.add("ID_CATEGORIE_COMPTABLE"); |
} |
fields.add("SOLDE_COMPTE"); |
fields.add("REMIND_DATE"); |
fields.add("OBSOLETE"); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/element/AgenceGroup.java |
---|
New file |
0,0 → 1,33 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.ui.group.Group; |
import org.openconcerto.ui.group.LayoutHints; |
public class AgenceGroup extends Group { |
public AgenceGroup(String elemCode) { |
super(elemCode); |
addItem("customerrelationship.customer.agency.designation", LayoutHints.DEFAULT_VERY_LARGE_FIELD_HINTS); |
addItem("customerrelationship.customer.agency.phone1", LayoutHints.DEFAULT_VERY_LARGE_FIELD_HINTS); |
addItem("customerrelationship.customer.agency.email", LayoutHints.DEFAULT_VERY_LARGE_FIELD_HINTS); |
addItem("customerrelationship.customer.agency.fax", LayoutHints.DEFAULT_VERY_LARGE_FIELD_HINTS); |
addItem("customerrelationship.customer.agency.customer", LayoutHints.DEFAULT_VERY_LARGE_FIELD_HINTS); |
final Group gAddress = new Group("customerrelationship.customer.agency.grp1", LayoutHints.DEFAULT_SEPARATED_GROUP_HINTS); |
gAddress.addItem("customerrelationship.customer.agency.address", new LayoutHints(true, true, true, true, true, true, true, true)); |
this.add(gAddress); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/report/ReportingCommercialFournisseurCreator.java |
---|
New file |
0,0 → 1,127 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.report; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.utils.cc.ITransformer; |
import java.math.BigDecimal; |
import java.util.Collection; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
public class ReportingCommercialFournisseurCreator { |
final private Date deb, fin; |
final private DBRoot root; |
public ReportingCommercialFournisseurCreator(Date deb, Date fin, DBRoot root) { |
this.deb = deb; |
this.fin = fin; |
this.root = root; |
} |
public Collection<ReportingCommercial> getValues() { |
// Facture |
final SQLTable tableFacture = this.root.getTable("SAISIE_VENTE_FACTURE_ELEMENT"); |
SQLRowValues rowValues = new SQLRowValues(tableFacture); |
rowValues.putRowValues("ID_SAISIE_VENTE_FACTURE").putRowValues("ID_COMMERCIAL").putNulls("PRENOM", "NOM"); |
rowValues.putRowValues("ID_ARTICLE").putRowValues("ID_FOURNISSEUR").putNulls("CODE", "NOM"); |
rowValues.putNulls("T_PV_HT", "T_PV_TTC"); |
SQLRowValuesListFetcher fetcher = SQLRowValuesListFetcher.create(rowValues); |
fetcher.setSelTransf(new ITransformer<SQLSelect, SQLSelect>() { |
@Override |
public SQLSelect transformChecked(SQLSelect input) { |
Where w = new Where(input.getJoinFromField(tableFacture.getField("ID_SAISIE_VENTE_FACTURE")).getJoinedTable().getField("DATE"), deb, fin); |
input.setWhere(w); |
return input; |
} |
}); |
Map<Integer, ReportingCommercial> mapCommercial = new HashMap<>(); |
List<SQLRowValues> result = fetcher.fetch(); |
for (SQLRowValues sqlRowValues : result) { |
if (!sqlRowValues.isForeignEmpty("ID_ARTICLE")) { |
SQLRowAccessor rowArticle = sqlRowValues.getForeign("ID_ARTICLE"); |
if (!rowArticle.isForeignEmpty("ID_FOURNISSEUR")) { |
SQLRowAccessor rowFournisseur = rowArticle.getForeign("ID_FOURNISSEUR"); |
int commercialID = sqlRowValues.getForeign("ID_SAISIE_VENTE_FACTURE").getForeignID("ID_COMMERCIAL"); |
if (!mapCommercial.containsKey(commercialID)) { |
SQLRowAccessor commercialRow = sqlRowValues.getForeign("ID_SAISIE_VENTE_FACTURE").getForeign("ID_COMMERCIAL"); |
mapCommercial.put(commercialID, new ReportingCommercial(commercialRow.getString("PRENOM") + " " + commercialRow.getString("NOM"), deb, fin)); |
} |
ReportingCommercial r = mapCommercial.get(commercialID); |
BigDecimal bigDecimal = new BigDecimal(sqlRowValues.getLong("T_PV_HT")).movePointLeft(2); |
r.add(rowFournisseur.getString("NOM"), bigDecimal); |
} |
} |
} |
// Avoir |
final SQLTable tableAvoir = this.root.getTable("AVOIR_CLIENT_ELEMENT"); |
SQLRowValues rowValuesAvoir = new SQLRowValues(tableAvoir); |
rowValuesAvoir.putRowValues("ID_AVOIR_CLIENT").putRowValues("ID_COMMERCIAL").putNulls("PRENOM", "NOM"); |
rowValuesAvoir.putRowValues("ID_ARTICLE").putRowValues("ID_FOURNISSEUR").putNulls("CODE", "NOM"); |
rowValuesAvoir.putNulls("T_PV_HT", "T_PV_TTC"); |
SQLRowValuesListFetcher fetcherAvoir = SQLRowValuesListFetcher.create(rowValuesAvoir); |
fetcherAvoir.setSelTransf(new ITransformer<SQLSelect, SQLSelect>() { |
@Override |
public SQLSelect transformChecked(SQLSelect input) { |
Where w = new Where(input.getJoinFromField(tableAvoir.getField("ID_AVOIR_CLIENT")).getJoinedTable().getField("DATE"), deb, fin); |
input.setWhere(w); |
return input; |
} |
}); |
List<SQLRowValues> resultA = fetcherAvoir.fetch(); |
for (SQLRowValues sqlRowValues : resultA) { |
if (!sqlRowValues.isForeignEmpty("ID_ARTICLE")) { |
SQLRowAccessor rowArticle = sqlRowValues.getForeign("ID_ARTICLE"); |
if (!rowArticle.isForeignEmpty("ID_FOURNISSEUR")) { |
SQLRowAccessor rowFournisseur = rowArticle.getForeign("ID_FOURNISSEUR"); |
int commercialID = sqlRowValues.getForeign("ID_AVOIR_CLIENT").getForeignID("ID_COMMERCIAL"); |
if (!mapCommercial.containsKey(commercialID)) { |
SQLRowAccessor commercialRow = sqlRowValues.getForeign("ID_AVOIR_CLIENT").getForeign("ID_COMMERCIAL"); |
mapCommercial.put(commercialID, new ReportingCommercial(commercialRow.getString("PRENOM") + " " + commercialRow.getString("NOM"), deb, fin)); |
} |
ReportingCommercial r = mapCommercial.get(commercialID); |
BigDecimal bigDecimal = new BigDecimal(sqlRowValues.getLong("T_PV_HT")).movePointLeft(2).negate(); |
r.add(rowFournisseur.getString("NOM"), bigDecimal); |
} |
} |
} |
return mapCommercial.values(); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/customerrelationship/customer/report/ReportingCommercialFournisseurPanel.java |
---|
New file |
0,0 → 1,125 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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. |
*/ |
/* |
* Créé le 23 avr. 2012 |
*/ |
package org.openconcerto.erp.core.customerrelationship.customer.report; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.utils.ExceptionHandler; |
import java.awt.Desktop; |
import java.awt.Frame; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.event.ActionEvent; |
import java.beans.PropertyChangeEvent; |
import java.beans.PropertyChangeListener; |
import java.io.File; |
import java.io.IOException; |
import java.util.ArrayList; |
import java.util.Calendar; |
import java.util.List; |
import javax.swing.AbstractAction; |
import javax.swing.JButton; |
import javax.swing.JLabel; |
import javax.swing.JPanel; |
import javax.swing.SwingUtilities; |
public class ReportingCommercialFournisseurPanel extends JPanel { |
public ReportingCommercialFournisseurPanel(final DBRoot root) { |
super(new GridBagLayout()); |
JLabel labelCom = new JLabel("Période du "); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
this.add(labelCom, c); |
c.gridx++; |
final JDate dateDeb = new JDate(); |
this.add(dateDeb, c); |
c.gridx++; |
JLabel labelYear = new JLabel("au"); |
final JDate dateFin = new JDate(); |
Calendar cal = Calendar.getInstance(); |
cal.set(Calendar.MONTH, Calendar.JANUARY); |
cal.set(Calendar.DAY_OF_MONTH, 1); |
dateDeb.setValue(cal.getTime()); |
this.add(labelYear, c); |
c.gridx++; |
this.add(dateFin, c); |
cal.set(Calendar.MONTH, Calendar.DECEMBER); |
cal.set(Calendar.DAY_OF_MONTH, 31); |
dateFin.setValue(cal.getTime()); |
final JButton buttonValid = new JButton(new AbstractAction("Valider") { |
@Override |
public void actionPerformed(ActionEvent e) { |
new Thread() { |
public void run() { |
ReportingCommercialFournisseurCreator creator = new ReportingCommercialFournisseurCreator(dateDeb.getValue(), dateFin.getValue(), root); |
List<ReportingCommercial> list = new ArrayList<>(creator.getValues()); |
ReportingCommercialPDF reporting = new ReportingCommercialPDF(list); |
File file; |
try { |
file = File.createTempFile("ReportingCommericalFournisseur", ".pdf"); |
reporting.export(file); |
Desktop.getDesktop().open(file); |
} catch (IOException e) { |
ExceptionHandler.handle("Erreur lors de la cration du fichier", e); |
} |
SwingUtilities.invokeLater(new Runnable() { |
@Override |
public void run() { |
Frame frame = (Frame) SwingUtilities.getRoot(ReportingCommercialFournisseurPanel.this); |
if (frame != null) { |
frame.dispose(); |
} |
} |
}); |
}; |
}.start(); |
} |
}); |
c.gridx++; |
// buttonValid.setEnabled(false); |
this.add(buttonValid, c); |
dateDeb.addValueListener(new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
buttonValid.setEnabled(dateDeb.getValue() != null && dateFin.getValue() != null); |
} |
}); |
dateFin.addValueListener(new PropertyChangeListener() { |
@Override |
public void propertyChange(PropertyChangeEvent evt) { |
buttonValid.setEnabled(dateDeb.getValue() != null && dateFin.getValue() != null); |
} |
}); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/element/EcritureSQLElement.java |
---|
35,6 → 35,7 |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowListRSH; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
292,6 → 293,7 |
public final SQLTableModelSourceOnline createLettrageTableSource() { |
final List<String> listEcriture = new ArrayList<String>(); |
listEcriture.add("LETTRAGE"); |
listEcriture.add("LETTRAGE_PARTIEL"); |
listEcriture.add("ID_COMPTE_PCE"); |
listEcriture.add("ID_MOUVEMENT"); |
if (getTable().contains("NOM_PIECE")) { |
668,14 → 670,16 |
@Override |
public Object create() throws SQLException { |
// on recupere l'ensemble des ecritures associées au mouvement |
SQLSelect selEcritures = new SQLSelect(); |
selEcritures.addSelect(tableEcriture.getField("ID")); |
selEcritures.addSelect(tableEcriture.getField("VALIDE")); |
selEcritures.addSelect(tableEcriture.getField("LETTRAGE")); |
selEcritures.setWhere(tableEcriture.getField("ID_MOUVEMENT"), "=", idMvt); |
List l = (List) base.getDataSource().execute(selEcritures.asString(), new ArrayListHandler()); |
for (int i = 0; i < l.size(); i++) { |
Object[] tmp = (Object[]) l.get(i); |
archiveEcriture(tableEcriture.getRow(Integer.parseInt(tmp[0].toString()))); |
List<SQLRow> rowEcr = SQLRowListRSH.execute(selEcritures); |
for (SQLRow r : rowEcr) { |
archiveEcriture(r); |
} |
return null; |
717,14 → 721,15 |
* @param row |
* @throws SQLException |
*/ |
public void archiveEcriture(SQLRow row) throws SQLException { |
public void archiveEcriture(SQLRowAccessor row) throws SQLException { |
if (!row.getBoolean("VALIDE")) { |
SQLRowValues rowVals = new SQLRowValues(this.getTable()); |
rowVals.put("IDUSER_DELETE", UserManager.getInstance().getCurrentUser().getId()); |
rowVals.put("ARCHIVE", 1); |
rowVals.update(row.getID()); |
UpdateBuilder builderArc = new UpdateBuilder(getTable()); |
builderArc.setObject("IDUSER_DELETE", UserManager.getInstance().getCurrentUser().getId()); |
builderArc.setObject("ARCHIVE", 1); |
builderArc.setWhere(new Where(getTable().getKey(), "=", row.getID())); |
getTable().getDBSystemRoot().getDataSource().execute(builderArc.asString()); |
// Annulation du lettrage si l'ecriture est lettrée pour ne pas avoir de lettrage |
// déséquilibré |
736,7 → 741,7 |
builder.setWhere(new Where(getTable().getField("LETTRAGE"), "=", codeLettrage)); |
getTable().getDBSystemRoot().getDataSource().execute(builder.asString()); |
} |
getTable().fireRowDeleted(row.getID()); |
// super.archive(row, true); |
} else { |
System.err.println("Impossible de supprimer une ecriture validée"); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/element/SaisieKmSQLElement.java |
---|
16,20 → 16,28 |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.finance.accounting.ui.AnalytiqueItemTable; |
import org.openconcerto.erp.core.finance.accounting.ui.ComptabiliteWorkflowPreferencePanel; |
import org.openconcerto.erp.core.finance.accounting.ui.PropoLettrage; |
import org.openconcerto.erp.core.finance.accounting.ui.SaisieKmItemTable; |
import org.openconcerto.erp.generationEcritures.GenerationMvtSaisieKm; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProvider; |
import org.openconcerto.erp.generationEcritures.provider.AccountingRecordsProviderManager; |
import org.openconcerto.erp.preferences.DefaultNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.BaseSQLComponent; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.SQLName; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.TableRef; |
import org.openconcerto.sql.model.UndefinedRowValuesCache; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.request.UpdateBuilder; |
import org.openconcerto.sql.sqlobject.ElementComboBox; |
import org.openconcerto.sql.utils.SQLUtils; |
import org.openconcerto.sql.view.list.RowValuesTableModel; |
432,9 → 440,25 |
} |
}); |
this.updateEcriture(getTable().getRow(id)); |
} catch (SQLException exn) { |
ExceptionHandler.handle("Erreur lors de la création des écritures associées à la saisie au kilometre.", exn); |
} |
boolean showPropoLettrage = Boolean.valueOf(DefaultNXProps.getInstance().getProperty(ComptabiliteWorkflowPreferencePanel.LETTRAGE_PROPO_KM)); |
if (showPropoLettrage) { |
if (id > SQLRow.NONEXISTANT_ID) { |
final SQLRow rowKM = getTable().getRow(id); |
SwingUtilities.invokeLater(new Runnable() { |
@Override |
public void run() { |
PropoLettrage lettragePropo = new PropoLettrage(getElement().getDirectory().getElement(EcritureSQLElement.class)); |
lettragePropo.transfert(rowKM); |
} |
}); |
} |
} |
return id; |
} |
466,7 → 490,19 |
this.tableKm.updateField("ID_SAISIE_KM", getSelectedID()); |
System.err.println("UPDATE ECRITURE"); |
this.updateEcriture(getElement().getTable().getRow(getSelectedID())); |
boolean showPropoLettrage = Boolean.valueOf(DefaultNXProps.getInstance().getProperty(ComptabiliteWorkflowPreferencePanel.LETTRAGE_PROPO_KM)); |
if (showPropoLettrage) { |
SQLRow rowKM = getTable().getRow(getSelectedID()); |
SwingUtilities.invokeLater(new Runnable() { |
@Override |
public void run() { |
PropoLettrage lettragePropo = new PropoLettrage(getElement().getDirectory().getElement(EcritureSQLElement.class)); |
lettragePropo.transfert(rowKM); |
} |
}); |
} |
} |
private Date dTemp = null; |
521,8 → 557,15 |
final SQLRow mvt = rowSaisieKm.getForeign("ID_MOUVEMENT"); |
final SQLRow piece = mvt.getForeign("ID_PIECE"); |
String labelSaisie = rowSaisieKm.getString("NOM"); |
piece.createEmptyUpdateRow().put("NOM", (labelSaisie.length() == 0 ? "Saisie au km " : labelSaisie)).commit(); |
AccountingRecordsProvider provider = AccountingRecordsProviderManager.get(GenerationMvtSaisieKm.ID); |
SQLRowValues rowValsPiece = piece.asRowValues(); |
rowValsPiece.put("NOM", (labelSaisie.length() == 0 ? "Saisie au km " : labelSaisie)); |
if (provider != null) { |
provider.putPieceLabel(rowSaisieKm, rowValsPiece); |
} |
rowValsPiece.commit(); |
// Mise à jour des écritures |
for (SQLRow rowKmElement : myListKmItem) { |
581,11 → 624,54 |
listEcr.remove(sqlRow); |
} |
} |
} |
} |
// Suppression des lettrages déséquilibré (ex : si on modifie un |
// montant d'une écriture lettrée) |
SQLSelect sel = new SQLSelect(); |
sel.addSelect(ecritureTable.getField("LETTRAGE")); |
sel.addGroupBy(ecritureTable.getField("LETTRAGE")); |
final TableRef aliasEcrTable = sel.getAlias(ecritureTable); |
final String quoteDebit = new SQLName(aliasEcrTable.getAlias(), "DEBIT").quote(); |
final String quoteCredit = new SQLName(aliasEcrTable.getAlias(), "CREDIT").quote(); |
sel.setHaving(Where.createRaw("SUM (" + quoteCredit + ") != SUM(" + quoteDebit + ")", aliasEcrTable.getField("DEBIT"))); |
List<String> resultBadLettrage = getElement().getTable().getDBSystemRoot().getDataSource().executeCol(sel.asString()); |
if (resultBadLettrage != null && !resultBadLettrage.isEmpty()) { |
UpdateBuilder update = new UpdateBuilder(ecritureTable); |
update.setObject(ecritureTable.getField("LETTRAGE"), ""); |
update.setObject(ecritureTable.getField("DATE_LETTRAGE"), null); |
Where w = new Where(ecritureTable.getField("LETTRAGE"), resultBadLettrage); |
update.setWhere(w); |
getElement().getTable().getDBSystemRoot().getDataSource().execute(update.asString()); |
} |
} |
// Suppression des lettrages déséquilibré (ex : si on modifie un |
// montant d'une écriture lettrée) |
SQLSelect sel = new SQLSelect(); |
sel.addSelect(ecritureTable.getField("LETTRAGE")); |
sel.addGroupBy(ecritureTable.getField("LETTRAGE")); |
final TableRef aliasEcrTable = sel.getAlias(ecritureTable); |
final String quoteDebit = new SQLName(aliasEcrTable.getAlias(), "DEBIT").quote(); |
final String quoteCredit = new SQLName(aliasEcrTable.getAlias(), "CREDIT").quote(); |
sel.setWhere(Where.isNotNull(ecritureTable.getField("LETTRAGE")).and(new Where(ecritureTable.getField("LETTRAGE"), "!=", ""))); |
sel.setHaving(Where.createRaw("SUM (" + quoteCredit + ") != SUM(" + quoteDebit + ")", aliasEcrTable.getField("DEBIT"))); |
List<String> resultBadLettrage = getTable().getDBSystemRoot().getDataSource().executeCol(sel.asString()); |
if (resultBadLettrage != null && !resultBadLettrage.isEmpty()) { |
UpdateBuilder update = new UpdateBuilder(ecritureTable); |
update.setObject(ecritureTable.getField("LETTRAGE"), ""); |
update.setObject(ecritureTable.getField("DATE_LETTRAGE"), null); |
Where w = new Where(ecritureTable.getField("LETTRAGE"), resultBadLettrage); |
update.setWhere(w); |
getTable().getDBSystemRoot().getDataSource().execute(update.asString()); |
} |
if (!listEcr.isEmpty()) { |
final EcritureSQLElement e = (EcritureSQLElement) Configuration.getInstance().getDirectory().getElement(ecritureTable); |
for (SQLRow sqlRow : listEcr) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/report/Map2033A.java |
---|
404,9 → 404,9 |
// 'Caisse |
// Racine = "53" |
// S084=511+512(D)...517+5187+54+58(D)+53 |
long v084 = this.sommeCompte.soldeCompteDebiteur(510, 517, true, this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteDebiteur(5180, 5185, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteDebiteur(5187, 5189, true, this.dateDebut, this.dateFin) + this.sommeCompte.sommeCompteFils("54", this.dateDebut, this.dateFin) |
+ this.sommeCompte.sommeCompteFils("53", this.dateDebut, this.dateFin) + this.sommeCompte.sommeCompteFils("58", this.dateDebut, this.dateFin); |
long v084 = this.sommeCompte.soldeCompteDebiteur(510, 517, true, this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteDebiteur(518, 518, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.sommeCompteFils("54", this.dateDebut, this.dateFin) + this.sommeCompte.sommeCompteFils("53", this.dateDebut, this.dateFin) |
+ this.sommeCompte.sommeCompteFils("58", this.dateDebut, this.dateFin); |
this.m.put("ACTIF1.11", GestionDevise.currencyToString(v084, false)); |
682,13 → 682,13 |
* this.sommeCompte.soldeCompteCrediteur(5180, 5180, true) - |
* this.sommeCompte.sommeCompteFils("5186") ; |
*/ |
long v156 = -this.sommeCompte.sommeCompteFils("161", this.dateDebut, this.dateFin) - this.sommeCompte.soldeCompte(163, 166, true, this.dateDebut, this.dateFin) |
- this.sommeCompte.soldeCompte(1680, 1681, true, this.dateDebut, this.dateFin) - this.sommeCompte.soldeCompte(1682, 1682, true, this.dateDebut, this.dateFin) |
- this.sommeCompte.soldeCompte(1684, 1689, true, this.dateDebut, this.dateFin) - this.sommeCompte.sommeCompteFils("17", this.dateDebut, this.dateFin) |
- this.sommeCompte.sommeCompteFils("426", this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteCrediteur(450, 454, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteCrediteur(456, 456, true, this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteCrediteur(458, 459, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteCrediteur(512, 517, true, this.dateDebut, this.dateFin) - this.sommeCompte.sommeCompteFils("518", this.dateDebut, this.dateFin) |
- this.sommeCompte.sommeCompteFils("519", this.dateDebut, this.dateFin); |
long v156 = -this.sommeCompte.sommeCompteFils("160", this.dateDebut, this.dateFin) - this.sommeCompte.sommeCompteFils("161", this.dateDebut, this.dateFin) |
- this.sommeCompte.soldeCompte(163, 166, true, this.dateDebut, this.dateFin) - this.sommeCompte.soldeCompte(1680, 1681, true, this.dateDebut, this.dateFin) |
- this.sommeCompte.soldeCompte(1682, 1682, true, this.dateDebut, this.dateFin) - this.sommeCompte.soldeCompte(1684, 1689, true, this.dateDebut, this.dateFin) |
- this.sommeCompte.sommeCompteFils("17", this.dateDebut, this.dateFin) - this.sommeCompte.sommeCompteFils("426", this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteCrediteur(450, 454, true, this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteCrediteur(456, 456, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteCrediteur(458, 459, true, this.dateDebut, this.dateFin) + this.sommeCompte.soldeCompteCrediteur(512, 517, true, this.dateDebut, this.dateFin) |
+ this.sommeCompte.soldeCompteCrediteur(518, 518, true, this.dateDebut, this.dateFin) - this.sommeCompte.sommeCompteFils("519", this.dateDebut, this.dateFin); |
this.m.put("PASSIF3.25", GestionDevise.currencyToString(v156, false)); |
// 151 |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/report/Map2033B.java |
---|
183,7 → 183,8 |
******************************************************************************************/ |
// 234 SommeSolde( 607, 608* )+SommeSolde( 6097, 6097* ) |
long v234 = this.sommeCompte.soldeCompte(607, 607, true, this.dateDeb, this.dateFin) + this.sommeCompte.soldeCompte(6097, 6097, true, this.dateDeb, this.dateFin) |
+ this.sommeCompte.soldeCompte(6087, 6087, true, this.dateDeb, this.dateFin); |
+ this.sommeCompte.soldeCompte(608, 608, true, this.dateDeb, this.dateFin) - this.sommeCompte.soldeCompte(6081, 6086, true, this.dateDeb, this.dateFin); |
this.m.put("CHARGES3.8", GestionDevise.currencyToString(v234, false)); |
// 208 |
206,7 → 207,7 |
// S238=601+602+6091+6092 |
// FIX Abaque ajout 609 |
long v238 = this.sommeCompte.soldeCompte(601, 602, true, this.dateDeb, this.dateFin) + this.sommeCompte.soldeCompte(609, 609, true, this.dateDeb, this.dateFin) |
- this.sommeCompte.soldeCompte(6093, 6099, true, this.dateDeb, this.dateFin) + this.sommeCompte.soldeCompte(6081, 6082, true, this.dateDeb, this.dateFin); |
- this.sommeCompte.soldeCompte(6093, 6099, true, this.dateDeb, this.dateFin) + this.sommeCompte.soldeCompte(6081, 6083, true, this.dateDeb, this.dateFin); |
this.m.put("CHARGES3.10", GestionDevise.currencyToString(v238, false)); |
// 212 |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/report/GrandLivreSheetXML.java |
---|
72,14 → 72,6 |
Date date; |
@Override |
public String getName() { |
if (this.date == null) { |
this.date = new Date(); |
} |
return "GrandLivre" + date.getTime(); |
} |
@Override |
protected String getStoragePathP() { |
return "Grand Livre"; |
} |
109,21 → 101,16 |
private String toDay = dateFormat.format(new Date()); |
private int size; |
// private void makeEntete(int rowDeb) { |
// |
// this.mCell.put("A" + rowDeb, this.rowSociete.getObject("NOM")); |
// this.mCell.put("G" + rowDeb, "Edition du " + this.toDay); |
// // this.mCell.put("D" + (rowDeb + 2), "Grand livre"); |
// // System.err.println("MAKE ENTETE"); |
// } |
// |
// private void makePiedPage(int row, String comptes) { |
// this.mCell.put("A" + row, "Compte : " + comptes); |
// this.mCell.put("E" + row, "Période du " + dateFormatEcr.format(this.dateDu) + " au " + |
// dateFormatEcr.format(this.dateAu)); |
// } |
private List<Map<String, Object>> recapSousTotaux = new ArrayList<>(); |
@Override |
public String getName() { |
if (this.date == null) { |
this.date = new Date(); |
} |
return "GrandLivre" + this.date.getTime(); |
} |
private void makeSousTotal(String numCpt, String nomCpt, Map<String, Object> line, Map<Integer, String> style, int pos, long debit, long credit) { |
style.put(pos, "Titre 1"); |
522,9 → 509,8 |
} |
private List<Integer> getListeCompteSolde() { |
SQLSelect sel = new SQLSelect(base); |
sel.addSelect(tableCompte.getField("ID")); |
SQLSelect sel = new SQLSelect(); |
sel.addSelect(tableEcriture.getField("ID_COMPTE_PCE")); |
sel.addSelect(tableEcriture.getField("DEBIT"), "SUM"); |
sel.addSelect(tableEcriture.getField("CREDIT"), "SUM"); |
531,8 → 517,9 |
Where w = getWhere(null); |
sel.setWhere(w); |
sel.addGroupBy(tableEcriture.getField("ID_COMPTE_PCE")); |
String req = sel.asString() + " GROUP BY \"COMPTE_PCE\".\"ID\""; |
String req = sel.asString(); |
System.err.println(req); |
List<Object[]> l = (List) base.getDataSource().execute(req, new ArrayListHandler()); |
List<Integer> list = new ArrayList<Integer>(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/report/BalanceSheet.java |
---|
350,7 → 350,7 |
} |
if (this.centralClient && !numeroCpt.equalsIgnoreCase("411") && numeroCpt.startsWith("411")) { |
if (addedLine || !this.centralFournImmo) { |
if (addedLine) { |
posLine--; |
j--; |
} else { |
370,7 → 370,7 |
this.mCell.put("A" + posLine, numCptFourn); |
this.mCell.put("B" + posLine, nomCptFourn); |
} else if (this.centralFournImmo && !numeroCpt.equalsIgnoreCase("404") && numeroCpt.startsWith("404")) { |
if (addedLineImmo || !this.centralFourn) { |
if (addedLineImmo) { |
posLine--; |
j--; |
} else { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/ComptabiliteWorkflowPreferencePanel.java |
---|
New file |
0,0 → 1,135 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.finance.accounting.ui; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.preferences.DefaultNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.request.SQLFieldTranslator; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.preferences.DefaultPreferencePanel; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.sql.SQLException; |
import javax.swing.JCheckBox; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
import javax.swing.SwingUtilities; |
public class ComptabiliteWorkflowPreferencePanel extends DefaultPreferencePanel { |
public static final String LETTRAGE_PROPO_KM = "LettragePropoKM"; |
private final static SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE"); |
private SQLRowValues rowPrefCompteVals = new SQLRowValues(tablePrefCompte); |
private JCheckBox checkLettrageKmPropo = new JCheckBox("Afficher une fenêtre de lettrage lors d'une saisie au kilomètre."); |
private JCheckBox checkLettrageAuto = new JCheckBox("Activer le lettrage automatique."); |
private JCheckBox checkHideCompteFacture = new JCheckBox("Ne pas afficher les comptes dans les factures."); |
private JCheckBox checkHideCompteClient = new JCheckBox("Ne pas afficher les comptes dans les clients."); |
private JCheckBox checkHideAnalytique = new JCheckBox("Ne pas afficher l'analytique dans les saisies au kilomètre."); |
public ComptabiliteWorkflowPreferencePanel() { |
super(); |
final SQLRow rowPrefCompte = tablePrefCompte.getRow(2); |
this.rowPrefCompteVals.loadAbsolutelyAll(rowPrefCompte); |
this.setLayout(new GridBagLayout()); |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
c.fill = GridBagConstraints.HORIZONTAL; |
c.anchor = GridBagConstraints.WEST; |
c.gridx = 0; |
c.gridy = 0; |
c.gridwidth = 1; |
c.gridheight = 1; |
c.weightx = 1; |
c.weighty = 0; |
c.gridwidth = GridBagConstraints.REMAINDER; |
this.add(this.checkLettrageAuto, c); |
c.gridy++; |
this.add(this.checkLettrageKmPropo, c); |
c.gridy++; |
this.add(this.checkHideCompteClient, c); |
c.gridy++; |
this.add(this.checkHideCompteFacture, c); |
c.gridy++; |
this.add(this.checkHideAnalytique, c); |
c.gridy++; |
// Spacer |
c.weighty = 1; |
c.gridy++; |
this.add(new JPanel(), c); |
setValues(); |
} |
public void storeValues() { |
this.rowPrefCompteVals.put("AUTO_LETTRAGE", this.checkLettrageAuto.isSelected()); |
DefaultNXProps.getInstance().setProperty(LETTRAGE_PROPO_KM, String.valueOf(this.checkLettrageKmPropo.isSelected())); |
DefaultNXProps.getInstance().setProperty("HideCompteClient", String.valueOf(this.checkHideCompteClient.isSelected())); |
DefaultNXProps.getInstance().setProperty("HideCompteFacture", String.valueOf(this.checkHideCompteFacture.isSelected())); |
DefaultNXProps.getInstance().setProperty("HideAnalytique", String.valueOf(this.checkHideAnalytique.isSelected())); |
DefaultNXProps.getInstance().store(); |
try { |
final Object[] pb = this.rowPrefCompteVals.getInvalid(); |
if (pb != null) { |
final SQLFieldTranslator trans = Configuration.getInstance().getTranslator(); |
JOptionPane.showMessageDialog(SwingUtilities.getRoot(this), "Impossible de valider les modifications! Le champ <" |
+ trans.getLabelFor(this.rowPrefCompteVals.getTable().getField(pb[0].toString())) + "> pointe sur un compte invalide!(" + pb[1] + ")"); |
} else { |
this.rowPrefCompteVals.update(); |
} |
} catch (SQLException e) { |
e.printStackTrace(); |
} |
} |
public void restoreToDefaults() { |
this.checkLettrageAuto.setSelected(false); |
this.checkLettrageKmPropo.setSelected(false); |
} |
public String getTitleName() { |
return "Comptabilité"; |
} |
private void setValues() { |
try { |
this.checkLettrageAuto.setSelected(rowPrefCompteVals.getBoolean("AUTO_LETTRAGE")); |
this.checkLettrageKmPropo.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty(LETTRAGE_PROPO_KM))); |
this.checkHideCompteClient.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideCompteClient"))); |
this.checkHideCompteFacture.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideCompteFacture"))); |
this.checkHideAnalytique.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideAnalytique"))); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/PropoLettrageRenderer.java |
---|
New file |
0,0 → 1,51 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.finance.accounting.ui; |
import org.openconcerto.ui.table.TableCellRendererUtils; |
import org.openconcerto.utils.GestionDevise; |
import java.awt.Component; |
import java.text.DateFormat; |
import java.text.SimpleDateFormat; |
import java.util.Date; |
import javax.swing.JTable; |
import javax.swing.SwingConstants; |
import javax.swing.table.DefaultTableCellRenderer; |
public class PropoLettrageRenderer extends DefaultTableCellRenderer { |
private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); |
public PropoLettrageRenderer() { |
} |
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
TableCellRendererUtils.setBackgroundColor(this, table, isSelected); |
if (value != null) { |
if (value instanceof Date) { |
this.setHorizontalAlignment(SwingConstants.RIGHT); |
this.setText(dateFormat.format((Date) value)); |
} else if (value.getClass() == Long.class) { |
this.setHorizontalAlignment(SwingConstants.RIGHT); |
this.setText(GestionDevise.currencyToString(((Long) value).longValue())); |
} |
} |
return this; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/LettragePanel.java |
---|
18,10 → 18,12 |
import org.openconcerto.erp.core.common.ui.DeviseNiceTableCellRenderer; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.EcritureSQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.MouvementSQLElement; |
import org.openconcerto.erp.core.finance.accounting.model.LettrageModel; |
import org.openconcerto.erp.model.ISQLCompteSelector; |
import org.openconcerto.erp.rights.ComptaUserRight; |
import org.openconcerto.erp.utils.LowerCaseFormatFilter; |
import org.openconcerto.erp.utils.UpperCaseFormatFilter; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
28,18 → 30,29 |
import org.openconcerto.sql.element.SQLElementDirectory; |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowListRSH; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLSystem; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.UndefinedRowValuesCache; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.request.ComboSQLRequest; |
import org.openconcerto.sql.users.rights.UserRightsManager; |
import org.openconcerto.sql.view.EditFrame; |
import org.openconcerto.sql.view.EditPanel.EditMode; |
import org.openconcerto.sql.view.EditPanelListener; |
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.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.FontUtils; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.ui.TitledSeparator; |
import org.openconcerto.ui.warning.JLabelWarning; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.ListMap; |
import org.openconcerto.utils.text.DocumentFilterList; |
import org.openconcerto.utils.text.DocumentFilterList.FilterType; |
import org.openconcerto.utils.text.SimpleDocumentListener; |
63,7 → 76,10 |
import java.text.ParseException; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import java.util.Map.Entry; |
import javax.swing.AbstractAction; |
import javax.swing.BorderFactory; |
85,7 → 101,7 |
public class LettragePanel extends JPanel { |
private ListPanelEcritures ecriturePanel; |
private JTextField codeLettrage; |
private JTextField codeLettrage, codeLettragePartiel; |
private ISQLCompteSelector selCompte; |
private JCheckBox boxValidEcriture, boxAddSousCompte; |
private JPanel warningPanel, warningSolde; |
101,6 → 117,7 |
private int modeSelect; |
private LettrageModel model; |
private JButton buttonLettrer; |
private final JButton buttonRegler = new JButton("Régler"); |
private JDate dateDeb, dateFin, dateLettrage; |
public LettragePanel() { |
162,6 → 179,20 |
this.add(this.codeLettrage, c); |
this.codeLettrage.setText(NumerotationAutoSQLElement.getNextCodeLettrage()); |
JLabel labelCodepartiel = new JLabel("Code lettrage partiel"); |
labelCodepartiel.setHorizontalAlignment(SwingConstants.RIGHT); |
c.gridx++; |
c.gridwidth = 1; |
c.weightx = 0; |
this.add(labelCodepartiel, c); |
this.codeLettragePartiel = new JTextField(10); |
DocumentFilterList.add((AbstractDocument) this.codeLettragePartiel.getDocument(), new LowerCaseFormatFilter(), FilterType.SIMPLE_FILTER); |
c.gridx++; |
c.weightx = 1; |
this.add(this.codeLettragePartiel, c); |
this.codeLettragePartiel.setText(getNextCodeLettragePartiel()); |
// Warning si aucun code rentré |
createPanelWarning(); |
c.gridwidth = GridBagConstraints.REMAINDER; |
323,6 → 354,7 |
this.add(this.boxValidEcriture, c); |
JPanel panelButton = new JPanel(); |
panelButton.add(this.buttonRegler, c); |
// Boutton lettrer |
355,20 → 387,276 |
this.add(buttonClose, c); |
this.buttonLettrer.addActionListener(new ActionListener() { |
public void actionPerformed(ActionEvent e) { |
try { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionLettrage(rowIndex, false); |
} catch (SQLException e1) { |
ExceptionHandler.handle("Erreur de lettrage", e1); |
} |
// System.err.println("Action lettrage sur " + i); |
actionLettrage(rowIndex); |
} |
}); |
this.buttonRegler.addActionListener(new ActionListener() { |
public void actionPerformed(ActionEvent e) { |
final List<SQLRowValues> res = LettragePanel.this.ecriturePanel.getListe().getSelectedRows(); |
final SQLTable tableKm = LettragePanel.this.ecriturePanel.getListe().getSource().getPrimaryTable().getTable("SAISIE_KM"); |
SQLRowValues rowValsKm = new SQLRowValues(tableKm); |
rowValsKm.put("DATE", new Date()); |
rowValsKm.put("ID_JOURNAL", JournalSQLElement.BANQUES); |
long solde = LettragePanel.this.model.getSoldeSelection(); |
final SQLTable tableKmItem = tableKm.getTable("SAISIE_KM_ELEMENT"); |
List<String> pieces = new ArrayList<>(); |
for (SQLRowValues sqlRowValues : res) { |
SQLRowValues rowValsKmItemTiers = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(tableKmItem)); |
rowValsKmItemTiers.put("NUMERO", sqlRowValues.getForeign("ID_COMPTE_PCE").getString("NUMERO")); |
rowValsKmItemTiers.put("NOM", sqlRowValues.getForeign("ID_COMPTE_PCE").getString("NOM")); |
final String pieceNom; |
if (sqlRowValues.getString("NOM_PIECE").trim().length() > 0) { |
pieceNom = sqlRowValues.getString("NOM_PIECE"); |
} else { |
pieceNom = sqlRowValues.getForeign("ID_MOUVEMENT").getForeign("ID_PIECE").getString("NOM"); |
} |
rowValsKmItemTiers.put("NOM_PIECE", pieceNom); |
if (pieceNom != null && pieceNom.trim().length() > 0) { |
pieces.add(pieceNom); |
} |
rowValsKmItemTiers.put("CREDIT", sqlRowValues.getLong("DEBIT")); |
rowValsKmItemTiers.put("DEBIT", sqlRowValues.getLong("CREDIT")); |
if (rowValsKmItemTiers.getTable().contains("MONTANT_ECHEANCE")) { |
rowValsKmItemTiers.put("MONTANT_ECHEANCE", sqlRowValues.getLong("CREDIT")); |
} |
rowValsKmItemTiers.put("ID_SAISIE_KM", rowValsKm); |
} |
SQLRowValues rowValsKmItemBq = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(tableKmItem)); |
boolean achat = solde < 0; |
// Compte bq |
int idPce = tableKm.getTable("TYPE_REGLEMENT").getRow(2).getInt("ID_COMPTE_PCE_" + (achat ? "FOURN" : "CLIENT")); |
if (idPce <= 1) { |
try { |
idPce = ComptePCESQLElement.getIdComptePceDefault("VenteCB"); |
} catch (Exception e1) { |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
} |
final SQLTable tableAccount = tableKmItem.getTable("COMPTE_PCE"); |
SQLRow rowCptBq = tableAccount.getRow(idPce); |
rowValsKmItemBq.put("NUMERO", rowCptBq.getString("NUMERO")); |
rowValsKmItemBq.put("NOM", rowCptBq.getString("NOM")); |
if (!pieces.isEmpty()) { |
StringBuilder build = new StringBuilder(); |
int nbPieces = pieces.size(); |
int i = 0; |
for (String string : pieces) { |
build.append(string); |
i++; |
if (i < nbPieces) { |
build.append(", "); |
} |
} |
rowValsKmItemBq.put("NOM_PIECE", build.toString()); |
} |
if (solde > 0) { |
rowValsKmItemBq.put("CREDIT", solde); |
rowValsKmItemBq.put("DEBIT", 0L); |
} else { |
rowValsKmItemBq.put("DEBIT", -solde); |
rowValsKmItemBq.put("CREDIT", 0L); |
} |
rowValsKmItemBq.put("ID_SAISIE_KM", rowValsKm); |
EditFrame frame = new EditFrame(Configuration.getInstance().getDirectory().getElement("SAISIE_KM"), EditMode.CREATION); |
frame.getSQLComponent().select(rowValsKm); |
frame.setVisible(true); |
frame.addEditPanelListener(new EditPanelListener() { |
@Override |
public void modified() { |
// TODO Auto-generated method stub |
} |
@Override |
public void inserted(int id) { |
List<SQLRow> rowsInserted = tableKm.getRow(id).getReferentRows(tableKmItem); |
List<String> piece = new ArrayList<>(); |
List<SQLRowAccessor> rowsToLettre = new ArrayList<>(); |
long solde = 0; |
for (SQLRowValues sqlRowValues : res) { |
rowsToLettre.add(sqlRowValues); |
final String nomPiece = sqlRowValues.getString("NOM_PIECE"); |
if (sqlRowValues.getForeign("ID_COMPTE_PCE").getString("NUMERO").startsWith("4") && nomPiece.trim().length() > 0) { |
piece.add(nomPiece); |
} |
solde += sqlRowValues.getLong("DEBIT"); |
solde -= sqlRowValues.getLong("CREDIT"); |
} |
for (SQLRow sqlRow : rowsInserted) { |
SQLRow rowEcr = sqlRow.getForeign("ID_ECRITURE"); |
final String nomPiece = sqlRow.getString("NOM_PIECE"); |
if (rowEcr.getString("COMPTE_NUMERO").startsWith("4")) { |
solde += rowEcr.getLong("DEBIT"); |
solde -= rowEcr.getLong("CREDIT"); |
if (nomPiece.trim().length() > 0) { |
piece.add(nomPiece); |
} |
rowsToLettre.add(rowEcr); |
} |
} |
if (solde == 0) { |
final String codeLettre = codeLettrage.getText().trim(); |
for (SQLRowAccessor row2 : rowsToLettre) { |
SQLRowValues rowVals = new SQLRowValues(row2.getTable()); |
// Lettrage |
// On lettre ou relettre la ligne avec le code saisi |
if (codeLettre.length() > 0) { |
rowVals.put("LETTRAGE_PARTIEL", ""); |
rowVals.put("LETTRAGE", codeLettre); |
rowVals.put("DATE_LETTRAGE", dateLettrage.getDate()); |
try { |
rowVals.update(row2.getID()); |
} catch (SQLException e1) { |
e1.printStackTrace(); |
} |
} |
} |
// Mise à jour du code de lettrage |
SQLElement elt = Configuration.getInstance().getDirectory().getElement("NUMEROTATION_AUTO"); |
SQLRowValues rowVals = elt.getTable().getRow(2).createEmptyUpdateRow(); |
rowVals.put("CODE_LETTRAGE", codeLettre); |
try { |
rowVals.update(); |
} catch (SQLException e) { |
e.printStackTrace(); |
} |
codeLettrage.setText(getNextCodeLettrage()); |
model.updateTotauxCompte(); |
} else { |
String codeLettreP = codeLettragePartiel.getText().trim(); |
String codeLettre = codeLettrage.getText().trim(); |
SQLSelect selEcr = new SQLSelect(); |
SQLTable tableEcr = tableKm.getTable("ECRITURE"); |
selEcr.addSelect(tableEcr.getKey()); |
selEcr.addSelect(tableEcr.getField("NOM_PIECE")); |
selEcr.addSelect(tableEcr.getField("DEBIT")); |
selEcr.addSelect(tableEcr.getField("CREDIT")); |
selEcr.addSelect(tableEcr.getField("LETTRAGE")); |
selEcr.addSelect(tableEcr.getField("LETTRAGE_PARTIEL")); |
Where w2 = new Where(tableEcr.getField("NOM_PIECE"), piece); |
w2 = w2.and(new Where(tableEcr.getField("COMPTE_NUMERO"), "LIKE", "40%").or(new Where(tableEcr.getField("COMPTE_NUMERO"), "LIKE", "41%"))); |
w2 = w2.and(new Where(tableEcr.getField("DATE_LETTRAGE"), "=", (Object) null)); |
selEcr.setWhere(w2); |
List<SQLRow> rows = SQLRowListRSH.execute(selEcr); |
ListMap<String, SQLRow> mapPiece = new ListMap<>(); |
Map<String, Long> soldePiece = new HashMap<>(); |
for (SQLRow sqlRow : rows) { |
String pieceName = sqlRow.getString("NOM_PIECE"); |
mapPiece.add(pieceName, sqlRow); |
long soldeRow = sqlRow.getLong("DEBIT") - sqlRow.getLong("CREDIT"); |
if (soldePiece.containsKey(pieceName)) { |
soldePiece.put(pieceName, soldePiece.get(pieceName) + soldeRow); |
} else { |
soldePiece.put(pieceName, soldeRow); |
} |
} |
for (Entry<String, List<SQLRow>> entry : mapPiece.entrySet()) { |
if (soldePiece.get(entry.getKey()) == 0) { |
try { |
for (SQLRow rowEcr : entry.getValue()) { |
SQLRowValues rowVals = rowEcr.createEmptyUpdateRow(); |
// Lettrage |
// On lettre ou relettre la ligne avec le code saisi |
if (codeLettre.length() > 0) { |
rowVals.put("LETTRAGE_PARTIEL", ""); |
rowVals.put("LETTRAGE", codeLettre); |
rowVals.put("DATE_LETTRAGE", dateLettrage.getDate()); |
rowVals.update(); |
} |
} |
// Mise à jour du code de lettrage |
SQLElement elt = Configuration.getInstance().getDirectory().getElement("NUMEROTATION_AUTO"); |
SQLRowValues rowVals = elt.getTable().getRow(2).createEmptyUpdateRow(); |
rowVals.put("CODE_LETTRAGE", codeLettre); |
rowVals.update(); |
codeLettre = getNextCodeLettrage(); |
} catch (SQLException e) { |
e.printStackTrace(); |
} |
} else { |
try { |
for (SQLRow rowEcr : entry.getValue()) { |
SQLRowValues rowVals = rowEcr.createEmptyUpdateRow(); |
// Lettrage |
// On lettre ou relettre la ligne avec le code saisi |
if (codeLettreP.length() > 0) { |
rowVals.put("LETTRAGE_PARTIEL", codeLettreP); |
rowVals.update(); |
} |
} |
// Mise à jour du code de lettrage |
SQLElement elt = Configuration.getInstance().getDirectory().getElement("NUMEROTATION_AUTO"); |
SQLRowValues rowVals = elt.getTable().getRow(2).createEmptyUpdateRow(); |
rowVals.put("CODE_LETTRAGE_PARTIEL", codeLettreP); |
rowVals.update(); |
codeLettreP = getNextCodeLettragePartiel(); |
} catch (SQLException e) { |
e.printStackTrace(); |
} |
} |
} |
codeLettrage.setText(getNextCodeLettrage()); |
codeLettragePartiel.setText(getNextCodeLettragePartiel()); |
model.updateTotauxCompte(); |
} |
} |
@Override |
public void deleted() { |
// TODO Auto-generated method stub |
} |
@Override |
public void cancelled() { |
// TODO Auto-generated method stub |
} |
}); |
} |
}); |
buttonDelettrer.addActionListener(new ActionListener() { |
public void actionPerformed(ActionEvent e) { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionDelettrage(rowIndex); |
actionDelettrage(rowIndex, false); |
} |
}); |
397,6 → 685,7 |
LettragePanel.this.warningSolde.setVisible(LettragePanel.this.model.getSoldeSelection() != 0); |
buttonDelettrer.setEnabled(LettragePanel.this.model.getSoldeSelection() == 0); |
LettragePanel.this.buttonLettrer.setEnabled(LettragePanel.this.model.getSoldeSelection() == 0); |
LettragePanel.this.buttonRegler.setEnabled(!LettragePanel.this.ecriturePanel.getListe().getSelectedRows().isEmpty()); |
} |
}); |
434,27 → 723,59 |
this.buttonLettrer.setEnabled((this.codeLettrage.getText().trim().length() != 0)); |
} |
private String getNextCodeLettragePartiel() { |
return Configuration.getInstance().getDirectory().getElement(NumerotationAutoSQLElement.class).getNextCodeLettragePartiel(); |
} |
private String getNextCodeLettrage() { |
return Configuration.getInstance().getDirectory().getElement(NumerotationAutoSQLElement.class).getNextCodeLettrage(); |
} |
/* Menu clic Droit */ |
private void addActionMenuDroit() { |
// JPopupMenu menu = new JPopupMenu(); |
this.ecriturePanel.getListe().addRowAction(new AbstractAction("Voir la source") { |
PredicateRowAction action = new PredicateRowAction(new AbstractAction() { |
public void actionPerformed(ActionEvent e) { |
SQLRow rowEcr = LettragePanel.this.ecriturePanel.getListe().fetchSelectedRow(); |
MouvementSQLElement.showSource(rowEcr.getInt("ID_MOUVEMENT")); |
} |
}, "financing.accouning.entries.source.show"); |
}, false, "financing.accouning.entries.source.show"); |
action.setPredicate(IListeEvent.getSingleSelectionPredicate()); |
// if (this.codeLettrage.getText().trim().length() != 0) { |
this.ecriturePanel.getListe().addIListeAction(action); |
final AbstractAction abstractAction = new AbstractAction() { |
public void actionPerformed(ActionEvent e) { |
try { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionLettrage(rowIndex); |
actionLettrage(rowIndex, false); |
} catch (SQLException e1) { |
ExceptionHandler.handle("erreur de lettrage", e1); |
} |
} |
}; |
this.ecriturePanel.getListe().addRowAction(abstractAction, "financing.accouning.entries.match"); |
PredicateRowAction actionLettre = new PredicateRowAction(abstractAction, false, "financing.accouning.entries.match"); |
actionLettre.setPredicate(IListeEvent.getNonEmptySelectionPredicate()); |
this.ecriturePanel.getListe().addIListeAction(actionLettre); |
final AbstractAction abstractActionPartiel = new AbstractAction("Lettrage Partiel") { |
public void actionPerformed(ActionEvent e) { |
try { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionLettrage(rowIndex, true); |
} catch (SQLException e1) { |
ExceptionHandler.handle("erreur de lettrage", e1); |
} |
} |
}; |
PredicateRowAction actionLettreP = new PredicateRowAction(abstractActionPartiel, false, "financing.accouning.entries.match.partial"); |
actionLettreP.setPredicate(IListeEvent.getNonEmptySelectionPredicate()); |
this.ecriturePanel.getListe().addIListeAction(actionLettreP); |
// } |
this.codeLettrage.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
467,13 → 788,20 |
public void actionPerformed(ActionEvent e) { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionDelettrage(rowIndex); |
actionDelettrage(rowIndex, false); |
} |
}, "financing.accouning.entries.unmatch"); |
// menu.show(mE.getComponent(), mE.getPoint().x, mE.getPoint().y); |
this.ecriturePanel.getListe().addRowAction(new AbstractAction("Délettrer partiel") { |
public void actionPerformed(ActionEvent e) { |
int[] rowIndex = LettragePanel.this.ecriturePanel.getListe().getJTable().getSelectedRows(); |
actionDelettrage(rowIndex, true); |
} |
}, "financing.accouning.entries.unmatch.partial"); |
} |
/* Panel Warning no numero releve */ |
private void createPanelWarning() { |
525,9 → 853,17 |
} |
// Lettre la ligne passée en parametre |
private void actionLettrage(int[] rowIndex) { |
String codeLettre = this.codeLettrage.getText().trim(); |
private void actionLettrage(int[] rowIndex, boolean partiel) throws SQLException { |
String codeLettre; |
if (partiel) { |
codeLettre = this.codeLettragePartiel.getText().trim(); |
} else { |
codeLettre = this.codeLettrage.getText().trim(); |
} |
// FIXME : transaction |
List<SQLRow> rowsSelected = new ArrayList<SQLRow>(rowIndex.length); |
long solde = 0; |
540,7 → 876,7 |
solde -= ((Long) row.getObject("CREDIT")).longValue(); |
} |
if (solde == 0) { |
if (partiel || solde == 0) { |
for (SQLRow row2 : rowsSelected) { |
555,8 → 891,12 |
EcritureSQLElement.validationEcritures(row2.getInt("ID_MOUVEMENT")); |
} |
if (partiel) { |
rowVals.put("LETTRAGE_PARTIEL", codeLettre); |
} else { |
rowVals.put("LETTRAGE", codeLettre); |
rowVals.put("DATE_LETTRAGE", this.dateLettrage.getDate()); |
} |
try { |
rowVals.update(row2.getID()); |
} catch (SQLException e1) { |
568,7 → 908,11 |
// Mise à jour du code de lettrage |
SQLElement elt = Configuration.getInstance().getDirectory().getElement("NUMEROTATION_AUTO"); |
SQLRowValues rowVals = elt.getTable().getRow(2).createEmptyUpdateRow(); |
if (partiel) { |
rowVals.put("CODE_LETTRAGE_PARTIEL", codeLettre); |
} else { |
rowVals.put("CODE_LETTRAGE", codeLettre); |
} |
try { |
rowVals.update(); |
} catch (SQLException e) { |
576,6 → 920,12 |
} |
this.codeLettrage.setText(NumerotationAutoSQLElement.getNextCodeLettrage()); |
if (partiel) { |
this.codeLettragePartiel.setText(getNextCodeLettragePartiel()); |
} else { |
this.codeLettrage.setText(getNextCodeLettrage()); |
} |
this.model.updateTotauxCompte(); |
} |
} |
592,7 → 942,7 |
} |
// Pointe la ligne passée en parametre |
private void actionDelettrage(int[] rowIndex) { |
private void actionDelettrage(int[] rowIndex, boolean partiel) { |
List<SQLRow> rowsSelected = new ArrayList<SQLRow>(rowIndex.length); |
606,11 → 956,22 |
solde -= ((Long) row.getObject("CREDIT")).longValue(); |
} |
if (solde == 0) { |
if (partiel || solde == 0) { |
for (SQLRow row : rowsSelected) { |
SQLRowValues rowVals = new SQLRowValues(this.tableEcr); |
if (partiel) { |
// Dépointage |
if (row.getString("LETTRAGE_PARTIEL").trim().length() != 0) { |
rowVals.put("LETTRAGE_PARTIEL", ""); |
try { |
rowVals.update(row.getID()); |
} catch (SQLException e1) { |
e1.printStackTrace(); |
} |
} |
} else { |
// Dépointage |
if (row.getString("LETTRAGE").trim().length() != 0) { |
624,6 → 985,7 |
} |
} |
} |
} |
this.model.updateTotauxCompte(); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/PointagePanel.java |
---|
14,6 → 14,7 |
package org.openconcerto.erp.core.finance.accounting.ui; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.ui.DeviseField; |
import org.openconcerto.erp.core.common.ui.DeviseNiceTableCellRenderer; |
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement; |
import org.openconcerto.erp.core.finance.accounting.element.EcritureSQLElement; |
74,7 → 75,6 |
import javax.swing.SwingUtilities; |
import javax.swing.SwingWorker; |
import javax.swing.event.DocumentEvent; |
import javax.swing.event.DocumentListener; |
import javax.swing.event.TableModelEvent; |
import javax.swing.event.TableModelListener; |
86,6 → 86,9 |
private final JDate datePointee; |
private JCheckBox boxValidEcriture; |
private JPanel warningPanel; |
private final DeviseField fieldSoldeD = new DeviseField(15); |
private final DeviseField fieldSoldeA = new DeviseField(15); |
private final DeviseField fieldEcart = new DeviseField(15); |
private final SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
private final SQLTable tableEcr = this.base.getTable("ECRITURE"); |
204,6 → 207,67 |
c.gridwidth = 1; |
this.add(this.datePointee, c); |
JPanel panelCheckValue = new JPanel(new GridBagLayout()); |
GridBagConstraints cCheck = new DefaultGridBagConstraints(); |
JLabel labelSoldeD = new JLabel("Solde de départ"); |
labelSoldeD.setHorizontalAlignment(SwingConstants.RIGHT); |
cCheck.gridwidth = 1; |
cCheck.weightx = 0; |
panelCheckValue.add(labelSoldeD, cCheck); |
cCheck.fill = GridBagConstraints.NONE; |
cCheck.weightx = 1; |
cCheck.gridx++; |
cCheck.gridwidth = 1; |
panelCheckValue.add(this.fieldSoldeD, cCheck); |
JLabel labelSoldeA = new JLabel("Solde d'arrivée"); |
labelSoldeA.setHorizontalAlignment(SwingConstants.RIGHT); |
cCheck.gridx++; |
cCheck.gridwidth = 1; |
cCheck.weightx = 0; |
panelCheckValue.add(labelSoldeA, cCheck); |
cCheck.fill = GridBagConstraints.NONE; |
cCheck.weightx = 1; |
cCheck.gridx++; |
cCheck.gridwidth = 1; |
panelCheckValue.add(this.fieldSoldeA, cCheck); |
JLabel labelEcart = new JLabel("Ecart pointage"); |
labelEcart.setHorizontalAlignment(SwingConstants.RIGHT); |
cCheck.gridx++; |
cCheck.gridwidth = 1; |
cCheck.weightx = 0; |
panelCheckValue.add(labelEcart, cCheck); |
cCheck.fill = GridBagConstraints.NONE; |
cCheck.weightx = 1; |
cCheck.gridx++; |
cCheck.gridwidth = 1; |
this.fieldEcart.setEditable(false); |
panelCheckValue.add(this.fieldEcart, cCheck); |
c.gridx++; |
c.gridwidth = 3; |
c.weightx = 1; |
this.add(panelCheckValue, c); |
this.fieldSoldeA.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
this.fieldSoldeD.getDocument().addDocumentListener(new SimpleDocumentListener() { |
@Override |
public void update(DocumentEvent e) { |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
TitledSeparator sepPeriode = new TitledSeparator("Filtre "); |
c.gridy++; |
c.gridx = 0; |
244,7 → 308,7 |
this.dateDeb.addValueListener(new PropertyChangeListener() { |
public void propertyChange(PropertyChangeEvent evt) { |
changeListRequest(); |
PointagePanel.this.model.updateTotauxCompte(); |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
254,7 → 318,7 |
this.dateFin.addValueListener(new PropertyChangeListener() { |
public void propertyChange(PropertyChangeEvent evt) { |
changeListRequest(); |
PointagePanel.this.model.updateTotauxCompte(); |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
446,7 → 510,7 |
this.ecriturePanel.getListe().addListener(new TableModelListener() { |
@Override |
public void tableChanged(TableModelEvent e) { |
PointagePanel.this.model.updateTotauxCompte(); |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
457,7 → 521,7 |
public void update(DocumentEvent e) { |
PointagePanel.this.warningPanel.setVisible((PointagePanel.this.codePointage.getText().trim().length() == 0)); |
PointagePanel.this.buttonPointer.setEnabled((PointagePanel.this.codePointage.getText().trim().length() != 0)); |
PointagePanel.this.model.updateTotauxCompte(); |
PointagePanel.this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
}); |
569,7 → 633,7 |
e1.printStackTrace(); |
} |
} |
this.model.updateTotauxCompte(); |
this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
public ListPanelEcritures getEcriturePanel() { |
596,7 → 660,7 |
e1.printStackTrace(); |
} |
} |
this.model.updateTotauxCompte(); |
this.model.updateTotauxCompte(PointagePanel.this.fieldSoldeD, PointagePanel.this.fieldSoldeA, PointagePanel.this.fieldEcart); |
} |
/* |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/ComptaPrefTreeNode.java |
---|
96,6 → 96,10 |
nsGlobale.add(new PrefTreeNode(PayeGlobalPreferencePanel.class, "Paye", new String[] { "paye", "csg" })); |
// Comptabilité |
final PrefTreeNode nCompta = new PrefTreeNode(ComptabiliteWorkflowPreferencePanel.class, "Comptabilité", new String[] { "comptabilité", "lettrage" }); |
nsGlobale.add(nCompta); |
// Gestion commerciale |
final PrefTreeNode nGestionArticle = new PrefTreeNode(GestionArticlePreferencePanel.class, "Gestion des articles", new String[] { "articles", "gestion", "longueur", "largeur", "poids" }); |
final PrefTreeNode nGestionPiece = new PrefTreeNode(GestionPieceCommercialePanel.class, "Gestion des pièces commerciales", new String[] { "mouvements", "pieces", "facture" }); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/PropoLettrage.java |
---|
New file |
0,0 → 1,239 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.finance.accounting.ui; |
import org.openconcerto.erp.config.Gestion; |
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.ConnectionHandlerNoSetup; |
import org.openconcerto.sql.model.SQLDataSource; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.utils.SQLUtils; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.FrameUtil; |
import org.openconcerto.ui.JDate; |
import org.openconcerto.ui.JLabelBold; |
import org.openconcerto.utils.TableSorter; |
import org.openconcerto.utils.Tuple2; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.event.ActionEvent; |
import java.awt.event.KeyAdapter; |
import java.awt.event.KeyEvent; |
import java.awt.event.MouseAdapter; |
import java.awt.event.MouseEvent; |
import java.sql.SQLException; |
import java.util.Date; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
import javax.swing.AbstractAction; |
import javax.swing.ImageIcon; |
import javax.swing.JButton; |
import javax.swing.JDialog; |
import javax.swing.JLabel; |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.JTable; |
public class PropoLettrage { |
private SQLElement eltEcr; |
private Date dateKm; |
public PropoLettrage(SQLElement eltEcr) { |
this.eltEcr = eltEcr; |
} |
public void transfert(SQLRow rowKM) { |
List<SQLRow> rowItems = rowKM.getReferentRows(rowKM.getTable().getTable("SAISIE_KM_ELEMENT").getField("ID_SAISIE_KM")); |
this.dateKm = rowKM.getDate("DATE").getTime(); |
Set<Tuple2<String, String>> cpts = new HashSet(); |
for (SQLRow sqlRow : rowItems) { |
final String cptNumero = sqlRow.getString("NUMERO"); |
if (cptNumero.startsWith("40") || cptNumero.startsWith("41")) { |
cpts.add(Tuple2.create(cptNumero, sqlRow.getString("NOM"))); |
} |
} |
if (!cpts.isEmpty()) { |
for (Tuple2<String, String> cpt : cpts) { |
SQLRowValues rowValsEcr = new SQLRowValues(this.eltEcr.getTable()); |
rowValsEcr.putNulls("DEBIT", "CREDIT", "ID", "COMPTE_NOM", "COMPTE_NUMERO", "NOM", "NOM_PIECE", "DATE"); |
rowValsEcr.putRowValues("ID_MOUVEMENT").putNulls("NUMERO").putRowValues("ID_PIECE").putNulls("NOM"); |
List<SQLRowValues> resultEcrNonLettrees = SQLRowValuesListFetcher.create(rowValsEcr).fetch(new Where(this.eltEcr.getTable().getField("COMPTE_NUMERO"), "=", cpt.get0()) |
.and(new Where(this.eltEcr.getTable().getField("LETTRAGE"), "=", "").or(new Where(this.eltEcr.getTable().getField("LETTRAGE"), "=", (Object) null)))); |
showPreview(resultEcrNonLettrees, cpt); |
} |
} |
} |
private void showPreview(final List<SQLRowValues> rows, Tuple2<String, String> compte) { |
if (rows.isEmpty() || rows.size() == 1) { |
return; |
} |
JPanel panelPreview = new JPanel(new GridBagLayout()); |
GridBagConstraints c = new DefaultGridBagConstraints(); |
final PropoLettrageTableModel propoModel = new PropoLettrageTableModel(this.eltEcr, rows); |
final TableSorter s = new TableSorter(propoModel); |
final JTable table = new JTable(s); |
s.setTableHeader(table.getTableHeader()); |
final int columnCount = table.getColumnCount(); |
for (int col = 0; col < columnCount; col++) { |
table.getColumnModel().getColumn(col).setCellRenderer(new PropoLettrageRenderer()); |
} |
c.gridwidth = GridBagConstraints.REMAINDER; |
panelPreview.add(new JLabelBold("Ecritures non lettrées du compte " + compte.get0() + " " + compte.get1()), c); |
c.gridx = 0; |
c.gridy++; |
c.fill = GridBagConstraints.BOTH; |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.weightx = 1; |
c.weighty = 1; |
panelPreview.add(new JScrollPane(table), c); |
c.gridy++; |
c.gridx = 0; |
c.gridwidth = 1; |
c.weighty = 0; |
c.weightx = 0; |
c.fill = GridBagConstraints.HORIZONTAL; |
panelPreview.add(new JLabel("Lettrer les écritures sélectionnées à la date du "), c); |
final JDate date = new JDate(); |
date.setValue(this.dateKm); |
c.gridx++; |
panelPreview.add(date); |
JDialog diag = new JDialog(); |
diag.setModal(true); |
diag.setContentPane(panelPreview); |
diag.setTitle("Lettrage " + compte.get0() + " " + compte.get1()); |
c.gridy++; |
c.fill = GridBagConstraints.NONE; |
c.anchor = GridBagConstraints.EAST; |
c.weightx = 1; |
c.weighty = 0; |
c.gridwidth = 1; |
final JButton valid = new JButton(new AbstractAction("Lettrer") { |
@Override |
public void actionPerformed(ActionEvent e) { |
try { |
SQLUtils.executeAtomic(eltEcr.getTable().getDBSystemRoot().getDataSource(), new ConnectionHandlerNoSetup<Object, Exception>() { |
@Override |
public Object handle(SQLDataSource ds) throws SQLException, Exception { |
String codeLettre = NumerotationAutoSQLElement.getNextCodeLettrage(); |
int[] selectedRows = table.getSelectedRows(); |
int[] modelRows = new int[selectedRows.length]; |
int nb = 0; |
for (int i : selectedRows) { |
modelRows[nb] = s.modelIndex(i); |
nb++; |
} |
final Date dateLettrage = date.getValue() == null ? new Date() : date.getValue(); |
for (int index : modelRows) { |
SQLRowValues rowValsEcr = propoModel.getRowValuesAt(index).createEmptyUpdateRow(); |
// Lettrage |
// On lettre ou relettre la ligne avec le code saisi |
if (codeLettre.length() > 0) { |
rowValsEcr.put("LETTRAGE", codeLettre); |
rowValsEcr.put("DATE_LETTRAGE", dateLettrage); |
rowValsEcr.update(); |
} |
} |
// Mise à jour du code de lettrage |
SQLElement elt = Configuration.getInstance().getDirectory().getElement("NUMEROTATION_AUTO"); |
SQLRowValues rowVals = elt.getTable().getRow(2).createEmptyUpdateRow(); |
rowVals.put("CODE_LETTRAGE", codeLettre); |
rowVals.update(); |
return null; |
} |
}); |
} catch (Exception e1) { |
org.openconcerto.utils.ExceptionHandler.handle("Erreur lors du lettrage", e1); |
} |
diag.dispose(); |
} |
}); |
panelPreview.add(valid, c); |
valid.setEnabled(false); |
c.weightx = 0; |
c.gridx++; |
JButton fermer = new JButton(new AbstractAction("Fermer") { |
@Override |
public void actionPerformed(ActionEvent e) { |
diag.dispose(); |
} |
}); |
panelPreview.add(fermer, c); |
table.addMouseListener(new MouseAdapter() { |
public void mouseReleased(MouseEvent e) { |
int[] selectedRows = table.getSelectedRows(); |
int[] modelRows = new int[selectedRows.length]; |
int nb = 0; |
for (int i : selectedRows) { |
modelRows[nb] = s.modelIndex(i); |
nb++; |
} |
valid.setEnabled(propoModel.isSelectionEqual(modelRows)); |
} |
}); |
table.addKeyListener(new KeyAdapter() { |
public void keyReleased(KeyEvent e) { |
int[] selectedRows = table.getSelectedRows(); |
int[] modelRows = new int[selectedRows.length]; |
int nb = 0; |
for (int i : selectedRows) { |
modelRows[nb] = s.modelIndex(i); |
nb++; |
} |
valid.setEnabled(propoModel.isSelectionEqual(modelRows)); |
} |
}); |
diag.pack(); |
diag.setIconImage(new ImageIcon(Gestion.class.getResource("frameicon.png")).getImage()); |
diag.setLocationRelativeTo(null); |
FrameUtil.show(diag); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/SuppressionEcrituresPanel.java |
---|
20,6 → 20,7 |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.ui.warning.JLabelWarning; |
27,7 → 28,10 |
import java.awt.GridBagLayout; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import java.util.ArrayList; |
import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
import javax.swing.JButton; |
import javax.swing.JFrame; |
69,13 → 73,20 |
c.gridx = 0; |
this.add(labelMouv, c); |
s.append(idS[0]); |
List<Integer> idMvts = new ArrayList<>(); |
for (int i = 1; i < idS.length; i++) { |
idMvts.add(idS[i]); |
s.append(", "); |
s.append(idS[i]); |
} |
s.append(')'); |
Set<String> lettrage = getLettrage(idMvts); |
if (lettrage != null && !lettrage.isEmpty()) { |
s.append("\nAttention certaines écritures sont lettrées avec les codes(" + org.openconcerto.utils.CollectionUtils.join(lettrage, ",") + "!"); |
} |
labelMouv.setText(s.toString()); |
} |
JButton buttonOK = new JButton("OK"); |
132,4 → 143,26 |
return idS; |
} |
private Set<String> getLettrage(List<Integer> mvtIds) { |
Set<String> codes = new HashSet<>(); |
SQLBase b = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
SQLTable tableEcr = b.getTable("ECRITURE"); |
SQLSelect sel = new SQLSelect(); |
sel.setDistinct(true); |
sel.addSelect(tableEcr.getField("LETTRAGE")); |
sel.setWhere(new Where(tableEcr.getField("ID_MOUVEMENT"), mvtIds).and(new Where(tableEcr.getField("LETTRAGE"), "=", "").and(new Where(tableEcr.getField("LETTRAGE"), "!=", (Object) null)))); |
List l = (List) b.getDataSource().execute(sel.asString(), new ArrayListHandler()); |
for (int i = 0; i < l.size(); i++) { |
Object[] tmp = (Object[]) l.get(i); |
codes.add(((String) tmp[0])); |
} |
return codes; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/CompteGestCommPreferencePanel.java |
---|
18,7 → 18,6 |
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement; |
import org.openconcerto.erp.generationEcritures.GenerationMvtSaisieVenteFacture; |
import org.openconcerto.erp.model.ISQLCompteSelector; |
import org.openconcerto.erp.preferences.DefaultNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.SQLRow; |
36,7 → 35,6 |
import java.awt.Insets; |
import java.sql.SQLException; |
import javax.swing.JCheckBox; |
import javax.swing.JLabel; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
50,10 → 48,6 |
private final static SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE"); |
private SQLRowValues rowPrefCompteVals = new SQLRowValues(tablePrefCompte); |
private JCheckBox checkLettrageAuto = new JCheckBox("Activer le lettrage automatique."); |
private JCheckBox checkHideCompteFacture = new JCheckBox("Ne pas afficher les comptes dans les factures."); |
private JCheckBox checkHideCompteClient = new JCheckBox("Ne pas afficher les comptes dans les clients."); |
private JCheckBox checkHideAnalytique = new JCheckBox("Ne pas afficher l'analytique dans les saisies au kilomètre."); |
public CompteGestCommPreferencePanel() { |
super(); |
78,14 → 72,6 |
c.weighty = 0; |
c.gridwidth = GridBagConstraints.REMAINDER; |
this.add(this.checkLettrageAuto, c); |
c.gridy++; |
this.add(this.checkHideCompteClient, c); |
c.gridy++; |
this.add(this.checkHideCompteFacture, c); |
c.gridy++; |
this.add(this.checkHideAnalytique, c); |
c.gridy++; |
/******************************************************************************************* |
* SAISIE DES ACHATS |
375,11 → 361,6 |
this.rowPrefCompteVals.put("ID_COMPTE_PCE_TVA_IMMO", this.selCompteTVAImmo.getValue()); |
this.rowPrefCompteVals.put("ID_COMPTE_PCE_PORT_SOUMIS", this.selComptePortSoumis.getValue()); |
this.rowPrefCompteVals.put("ID_COMPTE_PCE_PORT_NON_SOUMIS", this.selComptePortNonSoumis.getValue()); |
this.rowPrefCompteVals.put("AUTO_LETTRAGE", this.checkLettrageAuto.isSelected()); |
DefaultNXProps.getInstance().setProperty("HideCompteClient", String.valueOf(this.checkHideCompteClient.isSelected())); |
DefaultNXProps.getInstance().setProperty("HideCompteFacture", String.valueOf(this.checkHideCompteFacture.isSelected())); |
DefaultNXProps.getInstance().setProperty("HideAnalytique", String.valueOf(this.checkHideAnalytique.isSelected())); |
DefaultNXProps.getInstance().store(); |
try { |
final Object[] pb = this.rowPrefCompteVals.getInvalid(); |
if (pb != null) { |
402,8 → 383,6 |
compte = ComptePCESQLElement.getComptePceDefault("Achats"); |
this.checkLettrageAuto.setSelected(false); |
int value = ComptePCESQLElement.getId(compte); |
this.selCompteAchat.setValue(value); |
525,20 → 504,16 |
} |
this.selJrnlValEnc.setValue(value); |
} |
setComboValues(selCompteFourn, "ID_COMPTE_PCE_FOURNISSEUR", "Fournisseurs"); |
setComboValues(selCompteClient, "ID_COMPTE_PCE_CLIENT", "Clients"); |
setComboValues(selCompteAvanceClient, "ID_COMPTE_PCE_AVANCE_CLIENT", "AvanceClients"); |
setComboValues(selCompteValeurEncaissement, "ID_COMPTE_PCE_VALEUR_ENCAISSEMENT", "ValeurEncaissement"); |
setComboValues(selComptePortSoumis, "ID_COMPTE_PCE_PORT_SOUMIS", "PortVenteSoumisTVA"); |
setComboValues(selComptePortNonSoumis, "ID_COMPTE_PCE_PORT_NON_SOUMIS", "PortVenteNonSoumisTVA"); |
setComboValues(selCompteTVACol, "ID_COMPTE_PCE_TVA_VENTE", "TVACollectee"); |
setComboValues(selCompteTVADed, "ID_COMPTE_PCE_TVA_ACHAT", "TVADeductible"); |
setComboValues(selCompteTVAIntraComm, "ID_COMPTE_PCE_TVA_INTRA", "TVAIntraComm"); |
setComboValues(selCompteTVAImmo, "ID_COMPTE_PCE_TVA_IMMO", "TVAImmo"); |
this.checkLettrageAuto.setSelected(rowPrefCompteVals.getBoolean("AUTO_LETTRAGE")); |
this.checkHideCompteClient.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideCompteClient"))); |
this.checkHideCompteFacture.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideCompteFacture"))); |
this.checkHideAnalytique.setSelected(Boolean.valueOf(DefaultNXProps.getInstance().getProperty("HideAnalytique"))); |
setComboValues(this.selCompteFourn, "ID_COMPTE_PCE_FOURNISSEUR", "Fournisseurs"); |
setComboValues(this.selCompteClient, "ID_COMPTE_PCE_CLIENT", "Clients"); |
setComboValues(this.selCompteAvanceClient, "ID_COMPTE_PCE_AVANCE_CLIENT", "AvanceClients"); |
setComboValues(this.selCompteValeurEncaissement, "ID_COMPTE_PCE_VALEUR_ENCAISSEMENT", "ValeurEncaissement"); |
setComboValues(this.selComptePortSoumis, "ID_COMPTE_PCE_PORT_SOUMIS", "PortVenteSoumisTVA"); |
setComboValues(this.selComptePortNonSoumis, "ID_COMPTE_PCE_PORT_NON_SOUMIS", "PortVenteNonSoumisTVA"); |
setComboValues(this.selCompteTVACol, "ID_COMPTE_PCE_TVA_VENTE", "TVACollectee"); |
setComboValues(this.selCompteTVADed, "ID_COMPTE_PCE_TVA_ACHAT", "TVADeductible"); |
setComboValues(this.selCompteTVAIntraComm, "ID_COMPTE_PCE_TVA_INTRA", "TVAIntraComm"); |
setComboValues(this.selCompteTVAImmo, "ID_COMPTE_PCE_TVA_IMMO", "TVAImmo"); |
} catch (Exception e) { |
e.printStackTrace(); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/PropoLettrageTableModel.java |
---|
New file |
0,0 → 1,106 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.finance.accounting.ui; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRowValues; |
import java.util.Arrays; |
import java.util.Date; |
import java.util.List; |
import javax.swing.table.AbstractTableModel; |
public class PropoLettrageTableModel extends AbstractTableModel { |
List<SQLRowValues> datas; |
List<String> colName = Arrays.asList("Libellé", "N° Mouvement", "Pièce", "Pièce commerciale", "Date", "Débit", "Crédit"); |
List<String> fieldName = Arrays.asList("NOM", "ID_MOUVEMENT", "ID_PIECE", "PIECE_COMMERCIALE", "DATE", "DEBIT", "CREDIT"); |
List<Class<?>> colClass = Arrays.asList(String.class, Integer.class, String.class, String.class, Date.class, Long.class, Long.class); |
SQLElement eltEcr; |
public PropoLettrageTableModel(SQLElement eltEcr, List<SQLRowValues> datas) { |
this.datas = datas; |
this.eltEcr = eltEcr; |
} |
@Override |
public boolean isCellEditable(int rowIndex, int columnIndex) { |
return false; |
} |
@Override |
public Class<?> getColumnClass(int columnIndex) { |
return this.colClass.get(columnIndex); |
} |
@Override |
public int getRowCount() { |
return this.datas.size(); |
} |
@Override |
public int getColumnCount() { |
return this.fieldName.size(); |
} |
@Override |
public String getColumnName(int column) { |
String field = this.colName.get(column); |
return field; |
} |
@Override |
public Object getValueAt(int rowIndex, int columnIndex) { |
final SQLRowValues sqlRowValues = this.datas.get(rowIndex); |
final String fieldName2 = this.fieldName.get(columnIndex); |
if (fieldName2.startsWith("ID_")) { |
if (fieldName2.equals("ID_MOUVEMENT")) { |
return sqlRowValues.getForeign("ID_MOUVEMENT").getInt("NUMERO"); |
} else { |
return sqlRowValues.getForeign("ID_MOUVEMENT").getForeign("ID_PIECE").getString("NOM"); |
} |
} else { |
return sqlRowValues.getObject(fieldName2); |
} |
} |
public boolean isSelectionEqual(int[] selectionIndex) { |
if (selectionIndex == null || selectionIndex.length == 0) { |
return false; |
} else { |
long l = 0; |
for (int i : selectionIndex) { |
l += this.datas.get(i).getLong("DEBIT"); |
l -= this.datas.get(i).getLong("CREDIT"); |
} |
return l == 0; |
} |
} |
@Override |
public void setValueAt(Object aValue, int rowIndex, int columnIndex) { |
// this.datas.get(rowIndex).put(columnIndex, aValue); |
} |
public SQLRowValues getRowValuesAt(int index) { |
return this.datas.get(index); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/CloturePanel.java |
---|
95,7 → 95,7 |
JLabel label = new JLabel("- report des charges et produits constatés d'avance"); |
JLabel label2 = new JLabel("- report des charges à payer et produits à recevoir"); |
JLabel label3 = new JLabel("- impression du bilan, compte de résultat, grand livre, journaux et balance"); |
JLabel label5 = new JLabel("- génération les écritures comptables des payes"); |
JLabel label5 = new JLabel("- génération des écritures comptables des payes"); |
JLabel label4 = new JLabel("Il est préférable de réaliser une sauvegarde avant de continuer."); |
JLabel op = new JLabelBold("Opérations qui vont etre effectuées: "); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/ui/ListeGestCommEltPanel.java |
---|
152,6 → 152,9 |
} |
editModifyFrame.selectionId(this.getListe().getSelectedId()); |
editModifyFrame.setVisible(true); |
// Bouton delete retiré pour passer par la méthode qui supprime les |
// ecritures comptables |
editModifyFrame.getPanel().disableDelete(); |
} else { |
if (this.editReadOnlyFrame == null) { |
this.editReadOnlyFrame = new EditFrame(this.element, EditPanel.READONLY); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/accounting/model/PointageModel.java |
---|
14,6 → 14,7 |
package org.openconcerto.erp.core.finance.accounting.model; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.ui.DeviseField; |
import org.openconcerto.erp.core.finance.accounting.ui.PointagePanel; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLBase; |
111,6 → 112,11 |
private SwingWorker<String, Object> workerUpdater; |
public void updateTotauxCompte() { |
updateTotauxCompte(null, null, null); |
} |
public void updateTotauxCompte(final DeviseField depart, final DeviseField arrive, final DeviseField ecart) { |
final Date deb = panel.getDateDeb(); |
final Date fin = panel.getDateFin(); |
232,6 → 238,15 |
if (isCancelled()) { |
return; |
} |
if (arrive != null && depart != null && ecart != null) { |
final Long valueArrive = arrive.getValue(); |
final Long valueDepart = depart.getValue(); |
if (valueArrive != null && valueDepart != null) { |
ecart.setValue(valueArrive - valueDepart + PointageModel.this.debitNonPointe - PointageModel.this.creditNonPointe); |
} else { |
ecart.setValue(null); |
} |
} |
PointageModel.this.fireTableDataChanged(); |
} |
}; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/tax/model/TaxeCache.java |
---|
40,10 → 40,12 |
SQLRowValues rowVals = new SQLRowValues(table); |
rowVals.putNulls("TAUX", "CODE", "NOM", "ID_TAXE", "DEFAULT", "DEFAULT_ACHAT"); |
List<String> compteFields = Arrays.asList("ID_COMPTE_PCE_COLLECTE", "ID_COMPTE_PCE_DED", "ID_COMPTE_PCE", "ID_COMPTE_PCE_VENTE", "ID_COMPTE_PCE_VENTE_SERVICE", "ID_COMPTE_PCE_COLLECTE_INTRA", |
"ID_COMPTE_PCE_DED_INTRA"); |
"ID_COMPTE_PCE_DED_INTRA", "ID_COMPTE_PCE_COLLECTE_ENCAISSEMENT"); |
for (String foreignFieldName : compteFields) { |
if (table.contains(foreignFieldName)) { |
rowVals.putRowValues(foreignFieldName).putNulls("NUMERO", "NOM"); |
} |
} |
return SQLRowValuesListFetcher.create(rowVals); |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/action/ListeDesRelancesAction.java |
---|
14,16 → 14,9 |
package org.openconcerto.erp.core.finance.payment.action; |
import org.openconcerto.erp.action.CreateFrameAbstractAction; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.erp.core.common.ui.IListFilterDatePanel; |
import org.openconcerto.erp.core.sales.invoice.report.VenteFactureXmlSheet; |
import org.openconcerto.erp.generationDoc.gestcomm.FicheRelanceSheet; |
import org.openconcerto.erp.generationDoc.gestcomm.RelanceSheet; |
import org.openconcerto.erp.preferences.PrinterNXProps; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.view.IListFrame; |
import org.openconcerto.sql.view.ListeAddPanel; |
31,22 → 24,15 |
import org.openconcerto.sql.view.list.SQLTableModelColumnPath; |
import org.openconcerto.sql.view.list.SQLTableModelSourceOnline; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import org.openconcerto.utils.ExceptionHandler; |
import org.openconcerto.utils.cc.ITransformer; |
import java.awt.GridBagConstraints; |
import java.awt.event.ActionEvent; |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseListener; |
import java.util.List; |
import javax.swing.AbstractAction; |
import javax.swing.Action; |
import javax.swing.JButton; |
import javax.swing.JFrame; |
import javax.swing.JPopupMenu; |
public class ListeDesRelancesAction extends CreateFrameAbstractAction implements MouseListener { |
public class ListeDesRelancesAction extends CreateFrameAbstractAction { |
private IListFrame frame; |
67,9 → 53,9 |
@Override |
public String transformChecked(JButton input) { |
SQLRowAccessor row = getListe().fetchSelectedRow(); |
SQLRowValues row = getListe().getSelectedRow(); |
if (row.getForeign("ID_TYPE_LETTRE_RELANCE") == null || row.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")) { |
if (row.getObject("ID_TYPE_LETTRE_RELANCE") == null || row.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")) { |
return "Vous ne pouvez pas modifier une relance envoyée par mail!"; |
} |
return null; |
90,7 → 76,6 |
((SQLTableModelColumnPath) src.getColumns(elt.getTable().getField("INFOS")).iterator().next()).setEditable(true); |
this.frame.getPanel().getListe().getJTable().addMouseListener(this); |
this.frame.getPanel().setAddVisible(false); |
// Date panel |
109,124 → 94,4 |
return this.frame; |
} |
public void mouseClicked(MouseEvent e) { |
} |
public void mousePressed(MouseEvent e) { |
int selectedId = this.frame.getPanel().getListe().getSelectedId(); |
if (selectedId > 1 && e.getButton() == MouseEvent.BUTTON3) { |
// String locationRelance = |
// TemplateNXProps.getInstance().getStringProperty("LocationRelanceOO"); |
final SQLRow rowRelance = this.frame.getPanel().getListe().fetchSelectedRow(); |
boolean isNotMail = !(rowRelance.getForeign("ID_TYPE_LETTRE_RELANCE") == null || rowRelance.isForeignEmpty("ID_TYPE_LETTRE_RELANCE")); |
// final String fileName = "Relance_" + rowRelance.getString("NUMERO"); |
// final File fileOutOO = new File(locationRelance, fileName + ".odt"); |
JPopupMenu menu = new JPopupMenu(); |
final RelanceSheet s = new RelanceSheet(rowRelance); |
// Voir le document |
AbstractAction actionOpen = new AbstractAction("Voir le document") { |
public void actionPerformed(ActionEvent e) { |
s.generate(false, false, ""); |
s.showDocument(); |
} |
}; |
actionOpen.setEnabled(isNotMail); |
menu.add(actionOpen); |
// Impression |
AbstractAction actionPrint = new AbstractAction("Imprimer") { |
public void actionPerformed(ActionEvent e) { |
s.fastPrintDocument(); |
} |
}; |
actionPrint.setEnabled(isNotMail); |
menu.add(actionPrint); |
// Impression |
AbstractAction actionPrintFact = new AbstractAction("Imprimer la facture") { |
public void actionPerformed(ActionEvent e) { |
final Thread t = new Thread(new Runnable() { |
@Override |
public void run() { |
try { |
printInvoice(rowRelance); |
} catch (Exception e) { |
ExceptionHandler.handle("Impression impossible", e); |
} |
} |
}); |
t.start(); |
} |
}; |
actionPrintFact.setEnabled(isNotMail); |
menu.add(actionPrintFact); |
// Impression |
AbstractAction actionPrintBoth = new AbstractAction("Imprimer la facture et la relance") { |
public void actionPerformed(ActionEvent e) { |
final Thread t = new Thread(new Runnable() { |
@Override |
public void run() { |
try { |
s.fastPrintDocument(); |
printInvoice(rowRelance); |
} catch (Exception e) { |
ExceptionHandler.handle("Impression impossible", e); |
} |
} |
}); |
t.start(); |
} |
}; |
actionPrintBoth.setEnabled(isNotMail); |
menu.add(actionPrintBoth); |
// Générer |
final AbstractAction actionGenerate = new AbstractAction("Générer") { |
public void actionPerformed(ActionEvent e) { |
String printer = PrinterNXProps.getInstance().getStringProperty("RelancePrinter"); |
s.generate(false, true, printer, true); |
} |
}; |
actionGenerate.setEnabled(isNotMail); |
menu.add(actionGenerate); |
// Créer la fiche de relance |
menu.add(new AbstractAction("Créer la fiche de relance") { |
public void actionPerformed(ActionEvent e) { |
try { |
FicheRelanceSheet sheet = new FicheRelanceSheet(rowRelance); |
sheet.createDocumentAsynchronous(); |
sheet.showPrintAndExportAsynchronous(true, false, true); |
} catch (Exception ex) { |
ExceptionHandler.handle("Impression impossible", ex); |
} |
} |
}); |
menu.show(e.getComponent(), e.getPoint().x, e.getPoint().y); |
} |
} |
public void mouseReleased(MouseEvent e) { |
} |
public void mouseEntered(MouseEvent e) { |
} |
public void mouseExited(MouseEvent e) { |
} |
private void printInvoice(final SQLRow rowRelance) throws Exception { |
final VenteFactureXmlSheet sheet = new VenteFactureXmlSheet(rowRelance.getForeignRow("ID_SAISIE_VENTE_FACTURE")); |
sheet.getOrCreateDocumentFile(); |
sheet.showPrintAndExport(false, true, true); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/action/ListeDesEncaissementsAction.java |
---|
16,10 → 16,12 |
import org.openconcerto.erp.action.CreateFrameAbstractAction; |
import org.openconcerto.erp.core.common.ui.IListFilterDatePanel; |
import org.openconcerto.erp.core.common.ui.IListTotalPanel; |
import org.openconcerto.erp.core.common.ui.ListeViewPanel; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.element.SQLElement; |
import org.openconcerto.sql.model.SQLField; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.view.IListFrame; |
import org.openconcerto.sql.view.ListeAddPanel; |
import org.openconcerto.sql.view.list.IListe; |
26,11 → 28,15 |
import org.openconcerto.ui.DefaultGridBagConstraints; |
import java.awt.GridBagConstraints; |
import java.awt.event.ActionEvent; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.List; |
import javax.swing.Action; |
import javax.swing.JButton; |
import javax.swing.JFrame; |
import javax.swing.JOptionPane; |
public class ListeDesEncaissementsAction extends CreateFrameAbstractAction { |
43,12 → 49,55 |
final SQLElement elementEchClient = Configuration.getInstance().getDirectory().getElement("ENCAISSER_MONTANT"); |
// FIXME Cacher les encaissements de reports (créer à partir d'une échéance pour la reporter |
// ????) |
ListeAddPanel panel = new ListeAddPanel(elementEchClient, new IListe(elementEchClient.getTableSource(true))) { |
// FIXME faire les checks en plus dans l'element |
@Override |
protected void handleAction(JButton source, ActionEvent evt) { |
if (source == this.buttonEffacer) { |
List<SQLRowValues> rowValsSel = this.getListe().getSelectedRows(); |
ListeViewPanel panel = new ListeViewPanel(elementEchClient, new IListe(elementEchClient.getTableSource(true))); |
if (isEncaissementEditable(rowValsSel, "effacer")) { |
super.handleAction(source, evt); |
} |
} else if (source == this.buttonModifier) { |
List<SQLRowValues> rowValsSel = this.getListe().getSelectedRows(); |
if (isEncaissementEditable(rowValsSel, "supprimer")) { |
super.handleAction(source, evt); |
} |
} else { |
super.handleAction(source, evt); |
} |
} |
private boolean isEncaissementEditable(List<SQLRowValues> rowValsSel, String action) { |
for (SQLRowValues sqlRowValues : rowValsSel) { |
final SQLRow asRow = sqlRowValues.asRow(); |
Collection<? extends SQLRowAccessor> rowItems = asRow.getReferentRows(sqlRowValues.getTable().getTable("ENCAISSER_MONTANT_ELEMENT")); |
for (SQLRowAccessor sqlRowValues2 : rowItems) { |
if (sqlRowValues2.isForeignEmpty("ID_ECHEANCE_CLIENT")) { |
JOptionPane.showMessageDialog(null, "Impossible de " + action + " un encaissement qui ne vient pas d'une échéance"); |
return false; |
} |
} |
SQLRowAccessor rowAcMvt = asRow.getNonEmptyForeign("ID_MOUVEMENT"); |
if (rowAcMvt != null) { |
Collection<? extends SQLRowAccessor> rowItemsEcr = rowAcMvt.getReferentRows(rowAcMvt.getTable().getTable("ECRITURE").getField("ID_MOUVEMENT")); |
for (SQLRowAccessor sqlRowValues2 : rowItemsEcr) { |
if (sqlRowValues2.getBoolean("VALIDE")) { |
JOptionPane.showMessageDialog(null, "Impossible de " + action + " un encaissement dont les écritures sont validées."); |
return false; |
} |
} |
} |
} |
return true; |
} |
}; |
panel.setAddVisible(false); |
panel.setDeleteVisible(false); |
// panel.setDeleteVisible(false); |
IListFrame frame = new IListFrame(panel); |
List<SQLField> fields = new ArrayList<SQLField>(2); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/component/EncaisserMontantSQLComponent.java |
---|
28,7 → 28,9 |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLRowAccessor; |
import org.openconcerto.sql.model.SQLRowValues; |
import org.openconcerto.sql.model.SQLRowValuesListFetcher; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.sql.model.Where; |
import org.openconcerto.sql.sqlobject.ElementComboBox; |
import org.openconcerto.sql.view.list.RowValuesTableModel; |
import org.openconcerto.ui.DefaultGridBagConstraints; |
313,14 → 315,36 |
System.out.println("Génération des ecritures du reglement"); |
SQLRow row = getTable().getRow(id); |
try { |
((EncaisserMontantSQLElement) getElement()).regleFacture(row, null, false); |
} catch (Exception e) { |
ExceptionHandler.handle("Erreur de génération des écritures", e); |
} |
return id; |
} |
@Override |
public void update() { |
int id = getSelectedID(); |
SQLRowValues rowValsFetcValues = new SQLRowValues(getTable()); |
rowValsFetcValues.putRowValues("ID_MOUVEMENT").putNulls("ID","SOURCE","IDSOURCE"); |
SQLRowValues rowValsFetcValuesItem = new SQLRowValues(getTable().getTable("ENCAISSER_MONTANT_ELEMENT")); |
rowValsFetcValuesItem.put("ID_ENCAISSER_MONTANT", rowValsFetcValues).putNulls("MONTANT_REGLE"); |
rowValsFetcValuesItem.putRowValues("ID_ECHEANCE_CLIENT").putNulls("MONTANT", "REGLE"); |
List<SQLRowValues> oldEch = SQLRowValuesListFetcher.create(rowValsFetcValues).fetch(new Where(getTable().getKey(), "=", id)); |
super.update(); |
this.table.updateField("ID_ENCAISSER_MONTANT", id); |
System.out.println("Génération des ecritures du reglement"); |
SQLRow row = getTable().getRow(id); |
try { |
((EncaisserMontantSQLElement) getElement()).regleFacture(row); |
((EncaisserMontantSQLElement) getElement()).regleFacture(row, oldEch.get(0), true); |
} catch (Exception e) { |
ExceptionHandler.handle("Erreur de génération des écritures", e); |
} |
return id; |
} |
@Override |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/element/ReglerMontantSQLComponent.java |
---|
59,7 → 59,7 |
public class ReglerMontantSQLComponent extends BaseSQLComponent { |
private RegleMontantTable table = new RegleMontantTable(); |
private DeviseField montant = new DeviseField(10); |
private DeviseField montant = new DeviseField(15); |
private JDate date; |
private JLabel labelWarning = new JLabelWarning(); |
private JLabel labelWarningText = new JLabel("Le montant n'est pas valide!"); |
68,6 → 68,14 |
super(elt); |
} |
@Override |
public void select(SQLRowAccessor r) { |
super.select(r); |
if (r != null) { |
this.table.getRowValuesTable().insertFrom(r); |
} |
} |
public void addViews() { |
this.setLayout(new GridBagLayout()); |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
115,9 → 123,10 |
c.weightx = 0; |
this.add(new JLabel("Montant réglé", SwingConstants.RIGHT), c); |
c.gridx++; |
c.weightx = 0; |
c.weightx = 1; |
c.gridwidth = 1; |
c.fill = GridBagConstraints.NONE; |
DefaultGridBagConstraints.lockMinimumSize(this.montant); |
this.add(this.montant, c); |
// Warning |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/element/EncaisserMontantSQLElement.java |
---|
121,7 → 121,29 |
return Collections.singleton("ID_CLIENT"); |
} |
@Override |
protected synchronized void _initTableSource(final SQLTableModelSource table) { |
super._initTableSource(table); |
final BaseSQLTableModelColumn racCol = new BaseSQLTableModelColumn("Report échéance", Boolean.class) { |
@Override |
protected Object show_(SQLRowAccessor r) { |
return !r.getForeign("ID_MODE_REGLEMENT").getBoolean("COMPTANT"); |
} |
@Override |
public Set<FieldPath> getPaths() { |
Path p = new Path(getTable()); |
Path p2 = p.add(p.getLast().getField("ID_MODE_REGLEMENT")); |
return CollectionUtils.createSet(new FieldPath(p2, "COMPTANT")); |
} |
}; |
table.getColumns().add(racCol); |
} |
/* |
* (non-Javadoc) |
* |
172,21 → 194,64 |
super.archive(trees, cutLinks); |
} |
public void regleFacture(SQLRow row) throws Exception { |
public void regleFacture(SQLRow rowAfter, SQLRowValues rowBefore, boolean update) throws Exception { |
if (update && rowBefore == null) { |
throw new IllegalArgumentException(); |
} else if (update) { |
// Recalcul des échéances |
for (SQLRowAccessor rowEncaisse : rowBefore.getReferentRows(getTable().getTable("ENCAISSER_MONTANT_ELEMENT"))) { |
SQLRowAccessor rowEch = rowEncaisse.getForeign("ID_ECHEANCE_CLIENT"); |
// SI une echeance est associée (paiement non comptant) |
if (rowEch.getID() > 1) { |
SQLRowValues rowVals = rowEch.createEmptyUpdateRow(); |
rowVals.put("REGLE", Boolean.FALSE); |
if (rowEch.getBoolean("REGLE")) { |
rowVals.put("MONTANT", rowEncaisse.getLong("MONTANT_REGLE")); |
} else { |
rowVals.put("MONTANT", rowEch.getLong("MONTANT") + rowEncaisse.getLong("MONTANT_REGLE")); |
} |
rowVals.update(); |
} |
// TODO si pas une echeance, echeance à creer |
} |
// On supprime les mouvements |
SQLSelect sel = new SQLSelect(getTable().getBase()); |
SQLTable tableMvt = getTable().getTable("MOUVEMENT"); |
EcritureSQLElement eltEcr = (EcritureSQLElement) Configuration.getInstance().getDirectory().getElement(tableMvt.getTable("ECRITURE")); |
sel.addSelectStar(tableMvt); |
Where w = new Where(tableMvt.getField("SOURCE"), "=", getTable().getName()); |
w = w.and(new Where(tableMvt.getField("IDSOURCE"), "=", rowBefore.getID())); |
sel.setWhere(w); |
List<SQLRow> list = (List<SQLRow>) getTable().getBase().getDataSource().execute(sel.asString(), SQLRowListRSH.createFromSelect(sel, tableMvt)); |
for (SQLRow sqlRow : list) { |
eltEcr.archiveMouvementProfondeur(sqlRow.getID(), false); |
} |
// On supprime si une prochaine échéance a été créé (ex: prélévement) |
final SQLRowAccessor nonEmptyForeignMvt = rowBefore.getNonEmptyForeign("ID_MOUVEMENT"); |
if (nonEmptyForeignMvt != null && nonEmptyForeignMvt.getString("SOURCE").equals("ECHEANCE_CLIENT")) { |
eltEcr.archiveMouvementProfondeur(nonEmptyForeignMvt.getID(), true); |
} |
} |
System.out.println("Génération des ecritures du reglement"); |
String s = row.getString("NOM"); |
SQLRow rowModeRegl = row.getForeignRow("ID_MODE_REGLEMENT"); |
String s = rowAfter.getString("NOM"); |
SQLRow rowModeRegl = rowAfter.getForeignRow("ID_MODE_REGLEMENT"); |
SQLRow rowTypeRegl = rowModeRegl.getForeignRow("ID_TYPE_REGLEMENT"); |
// Compte Client |
SQLRow clientRow = row.getForeignRow("ID_CLIENT"); |
SQLRow clientRow = rowAfter.getForeignRow("ID_CLIENT"); |
String label = "Règlement vente " + ((s == null) ? "" : s) + " (" + rowTypeRegl.getString("NOM") + ") " + StringUtils.limitLength(clientRow.getString("NOM"), 20); |
long montant = row.getLong("MONTANT"); |
long montant = rowAfter.getLong("MONTANT"); |
PrixTTC ttc = new PrixTTC(montant); |
List<SQLRow> l = row.getReferentRows(row.getTable().getTable("ENCAISSER_MONTANT_ELEMENT")); |
List<SQLRow> l = rowAfter.getReferentRows(rowAfter.getTable().getTable("ENCAISSER_MONTANT_ELEMENT")); |
if (l.isEmpty()) { |
SwingUtilities.invokeLater(new Runnable() { |
195,17 → 260,17 |
JOptionPane.showMessageDialog(null, "Un problème a été rencontré lors de l'encaissement! \n Les écritures comptables non pu être générer!"); |
} |
}); |
System.err.println("Liste des échéances vides pour l'encaissement ID " + row.getID()); |
System.err.println("Liste des échéances vides pour l'encaissement ID " + rowAfter.getID()); |
Thread.dumpStack(); |
return; |
} |
new GenerationReglementVenteNG(label, clientRow, ttc, row.getDate("DATE").getTime(), rowModeRegl, row, l.get(0).getForeignRow("ID_MOUVEMENT_ECHEANCE"), false, false, row.getString("TIERS"), |
row.getForeign("ID_COMPTE_PCE_TIERS")); |
new GenerationReglementVenteNG(label, clientRow, ttc, rowAfter.getDate("DATE").getTime(), rowModeRegl, rowAfter, l.get(0).getForeignRow("ID_MOUVEMENT_ECHEANCE"), false, false, |
rowAfter.getString("TIERS"), rowAfter.getForeign("ID_COMPTE_PCE_TIERS")); |
// Mise a jour du montant de l'echeance |
boolean supplement = false; |
if (!row.getBoolean("ACOMPTE")) { |
if (!rowAfter.getBoolean("ACOMPTE")) { |
// On marque les echeances comme reglees |
for (SQLRow sqlRow : l) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/element/ChequeFournisseurSQLElement.java |
---|
34,6 → 34,7 |
import java.util.List; |
import javax.swing.JLabel; |
import javax.swing.JPanel; |
import javax.swing.SwingConstants; |
public class ChequeFournisseurSQLElement extends ChequeSQLElement { |
129,7 → 130,7 |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
// Montant |
JLabel labelMontant = new JLabel("Montant "); |
JLabel labelMontant = new JLabel("Montant", SwingConstants.RIGHT); |
this.add(labelMontant, c); |
c.gridx++; |
137,7 → 138,7 |
this.add(this.textMontant, c); |
// Date |
JLabel labelDate = new JLabel("Date "); |
JLabel labelDate = new JLabel("Date", SwingConstants.RIGHT); |
c.weightx = 0; |
c.gridx++; |
labelDate.setHorizontalAlignment(SwingConstants.RIGHT); |
145,19 → 146,24 |
JDate dateAchat = new JDate(true); |
c.gridx++; |
c.gridwidth = GridBagConstraints.REMAINDER; |
this.add(dateAchat, c); |
c.gridy++; |
c.gridx = 0; |
JLabel labelFournisseurNom = new JLabel("Fournisseur "); |
JLabel labelFournisseurNom = new JLabel("Fournisseur", SwingConstants.RIGHT); |
this.add(labelFournisseurNom, c); |
final ElementComboBox nomFournisseur = new ElementComboBox(); |
c.gridx++; |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.gridwidth = 3; |
this.add(nomFournisseur, c); |
JPanel spacer = new JPanel(); |
spacer.setOpaque(false); |
c.weighty = 1; |
c.gridy++; |
this.add(spacer, c); |
this.addRequiredSQLObject(nomFournisseur, "ID_FOURNISSEUR"); |
this.addRequiredSQLObject(this.textMontant, "MONTANT"); |
this.addRequiredSQLObject(dateAchat, "DATE_ACHAT"); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/element/SDDMessageSQLElement.java |
---|
207,7 → 207,7 |
final File directDebitDir = new File(newPath); |
try { |
for (final SQLRowAccessor messageRow : messages) { |
FileUtils.write(messageRow.getString("XML"), new File(directDebitDir, messageRow.getString("MessageIdentification") + ".xml"), StringUtils.UTF8, false); |
FileUtils.writeUTF8(messageRow.getString("XML"), new File(directDebitDir, messageRow.getString("MessageIdentification") + ".xml")); |
} |
} catch (IOException exn) { |
ExceptionHandler.handle(comp, "Impossible d'exporter", exn); |
422,7 → 422,7 |
} |
public SQLTable getTable() { |
return table; |
return this.table; |
} |
@Override |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/finance/payment/element/ReglerMontantSQLElement.java |
---|
23,6 → 23,7 |
import org.openconcerto.utils.CollectionUtils; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.List; |
import java.util.Set; |
51,6 → 52,38 |
@Override |
protected void _initTableSource(SQLTableModelSource res) { |
super._initTableSource(res); |
final BaseSQLTableModelColumn racColFact = new BaseSQLTableModelColumn("Factures associées", String.class) { |
@Override |
protected Object show_(SQLRowAccessor r) { |
Collection<? extends SQLRowAccessor> l = r.getReferentRows(r.getTable().getTable("REGLER_MONTANT_ELEMENT")); |
String s = ""; |
for (SQLRowAccessor sqlRowAccessor : l) { |
if (!sqlRowAccessor.isForeignEmpty("ID_MOUVEMENT_ECHEANCE")) { |
SQLRowAccessor rMvt = sqlRowAccessor.getForeign("ID_MOUVEMENT_ECHEANCE"); |
if (!rMvt.isForeignEmpty("ID_PIECE")) { |
SQLRowAccessor rP = rMvt.getForeign("ID_PIECE"); |
s += (s.trim().length() > 0 ? ", " : "") + rP.getString("NOM"); |
} |
} |
} |
return s; |
} |
@Override |
public Set<FieldPath> getPaths() { |
Path p = new Path(getTable()); |
Path p2 = p.add(p.getLast().getTable("REGLER_MONTANT_ELEMENT")); |
Path p3 = p2.add(p2.getLast().getField("ID_MOUVEMENT_ECHEANCE")); |
Path p4 = p3.add(p3.getLast().getField("ID_PIECE")); |
return CollectionUtils.createSet(new FieldPath(p4, "NOM")); |
} |
}; |
res.getColumns().add(racColFact); |
final BaseSQLTableModelColumn racCol = new BaseSQLTableModelColumn("Report échéance", Boolean.class) { |
@Override |
protected Object show_(SQLRowAccessor r) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/employe/element/CommercialSQLElement.java |
---|
14,7 → 14,10 |
package org.openconcerto.erp.core.humanresources.employe.element; |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement; |
import org.openconcerto.erp.core.edm.AttachmentAction; |
import org.openconcerto.sql.element.SQLComponent; |
import org.openconcerto.sql.view.list.IListeAction.IListeEvent; |
import org.openconcerto.sql.view.list.RowAction.PredicateRowAction; |
import org.openconcerto.utils.ListMap; |
import java.util.ArrayList; |
28,7 → 31,12 |
public CommercialSQLElement(String tableName, String singular, String plural) { |
super(tableName, singular, plural); |
if (getTable().contains("ATTACHMENTS")) { |
PredicateRowAction actionAttachment = new PredicateRowAction(new AttachmentAction().getAction(), true); |
actionAttachment.setPredicate(IListeEvent.getSingleSelectionPredicate()); |
getRowActions().add(actionAttachment); |
} |
} |
protected List<String> getListFields() { |
final List<String> l = new ArrayList<String>(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/ui/EditionFichePayePanel.java |
---|
259,7 → 259,7 |
public void mousePressed(final MouseEvent e) { |
int row = table.rowAtPoint(e.getPoint()); |
int row = ((TableSorter) table.getModel()).modelIndex(table.rowAtPoint(e.getPoint())); |
final int idSal = model.getIdSalAtRow(row); |
if (e.getButton() == MouseEvent.BUTTON3) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/element/InfosSalariePayeSQLElement.java |
---|
141,6 → 141,30 |
this.add(comboConvention, c); |
c.gridwidth = 1; |
// Contrat |
c.fill = GridBagConstraints.BOTH; |
JPanel panelContrat = new JPanel(); |
panelContrat.setOpaque(false); |
panelContrat.setBorder(BorderFactory.createTitledBorder("Contrat de travail")); |
panelContrat.setLayout(new GridBagLayout()); |
GridBagConstraints c2 = new DefaultGridBagConstraints(); |
c2.fill = GridBagConstraints.HORIZONTAL; |
c2.weighty = 1; |
c2.weightx = 1; |
c2.anchor = GridBagConstraints.NORTH; |
this.addView("ID_CONTRAT_SALARIE", REQ + ";" + DEC + ";" + SEP); |
ElementSQLObject eltContrat = (ElementSQLObject) this.getView("ID_CONTRAT_SALARIE"); |
panelContrat.add(eltContrat, c2); |
c.gridx = 0; |
c.gridy++; |
c.gridheight = 1; |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.weightx = 1; |
this.add(panelContrat, c); |
c.gridwidth = 1; |
c.gridheight = 1; |
// Classement conventionnel |
c.fill = GridBagConstraints.BOTH; |
JPanel panelClassement = new JPanel(); |
154,10 → 178,10 |
c.weightx = 1; |
panelClassement.add(eltClassement, c); |
c.gridy = 1; |
c.gridy = 2; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
c.weightx = 1; |
this.add(panelClassement, c); |
// Classement conventionnel |
174,7 → 198,7 |
c.gridy = 0; |
c.weightx = 1; |
panelCoeff.add(eltCoeff, c); |
c.gridy = 2; |
c.gridy = 3; |
c.gridx = 0; |
c.gridwidth = 2; |
c.weightx = 0; |
181,30 → 205,7 |
this.add(panelCoeff, c); |
c.gridwidth = 1; |
} |
// Contrat |
c.fill = GridBagConstraints.BOTH; |
JPanel panelContrat = new JPanel(); |
panelContrat.setOpaque(false); |
panelContrat.setBorder(BorderFactory.createTitledBorder("Contrat de travail")); |
panelContrat.setLayout(new GridBagLayout()); |
GridBagConstraints c2 = new DefaultGridBagConstraints(); |
c2.fill = GridBagConstraints.HORIZONTAL; |
c2.weighty = 1; |
c2.weightx = 1; |
c2.anchor = GridBagConstraints.NORTH; |
this.addView("ID_CONTRAT_SALARIE", REQ + ";" + DEC + ";" + SEP); |
ElementSQLObject eltContrat = (ElementSQLObject) this.getView("ID_CONTRAT_SALARIE"); |
panelContrat.add(eltContrat, c2); |
c.gridx = 2; |
c.gridy = 1; |
c.gridheight = 4; |
c.gridwidth = GridBagConstraints.REMAINDER; |
c.weightx = 1; |
this.add(panelContrat, c); |
c.gridwidth = 1; |
c.gridheight = 1; |
/*********************************************************************************** |
* DATE ENTREE / SORTIE |
**********************************************************************************/ |
248,8 → 249,8 |
* c.gridy++; c.gridx = 0; c.fill = GridBagConstraints.HORIZONTAL; |
* panelEntreeSortie.add(labelAnc, c); c.gridx++; panelEntreeSortie.add(textAnc, c); |
*/ |
c.gridx = 0; |
c.gridy = 3; |
c.gridx = 2; |
c.gridy = 2; |
c.gridwidth = 2; |
this.add(panelEntreeSortie, c); |
c.gridwidth = 1; |
307,6 → 308,7 |
labelSalaireBase.setHorizontalAlignment(SwingConstants.RIGHT); |
JTextField salaireBase = new JTextField(); |
c.gridx++; |
c.weightx = 0; |
panelBase.add(labelSalaireBase, c); |
c.gridx++; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/element/DiplomePrepareSQLElement.java |
---|
New file |
0,0 → 1,28 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.humanresources.payroll.element; |
import org.openconcerto.sql.model.DBRoot; |
public class DiplomePrepareSQLElement extends AbstractCodeSQLElement { |
public DiplomePrepareSQLElement(final DBRoot root) { |
super(root.getTable("DIPLOME_PREPARE"), "un diplôme préparé", "diplômes préparés"); |
} |
@Override |
protected String createCode() { |
return createCodeOfPackage() + ".diplome.code"; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/element/SalarieSQLElement.java |
---|
49,11 → 49,9 |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
import java.util.Map; |
import javax.swing.AbstractAction; |
import javax.swing.BorderFactory; |
import javax.swing.JComponent; |
import javax.swing.JLabel; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
316,8 → 314,7 |
this.tabbedPane.add("Cumuls et variables de la période", new JScrollPane(panelAllCumul)); |
// this.tabbedPane.setEnabledAt(this.tabbedPane.getTabCount() - 1, false); |
Map<String, JComponent> additionalFields = getElement().getAdditionalFields(); |
if (additionalFields != null && additionalFields.size() > 0) { |
if (!getElement().getAdditionalFields().isEmpty()) { |
// Champ Module |
c.gridx = 0; |
c.gridy++; |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/element/ContratSalarieSQLElement.java |
---|
246,7 → 246,7 |
this.add(selStatutCatConv, c); |
List<String> dsnFF = Arrays.asList("ID_CONTRAT_MODALITE_TEMPS", "ID_CONTRAT_REGIME_MALADIE", "ID_CONTRAT_REGIME_VIEILLESSE", "ID_CONTRAT_DETACHE_EXPATRIE", |
"ID_CONTRAT_DISPOSITIF_POLITIQUE", "ID_CONTRAT_MOTIF_RECOURS"); |
"ID_CONTRAT_DISPOSITIF_POLITIQUE", "ID_CONTRAT_MOTIF_RECOURS", "ID_DIPLOME_PREPARE"); |
int p = 0; |
for (String ffName : dsnFF) { |
JLabel labelFF = new JLabel(getLabelFor(ffName)); |
266,7 → 266,7 |
c.weighty = 1; |
c.weightx = 1; |
this.add(selFF, c); |
if (ffName.equals("ID_CONTRAT_MOTIF_RECOURS")) { |
if (ffName.equals("ID_CONTRAT_MOTIF_RECOURS") || ffName.equals("ID_DIPLOME_PREPARE")) { |
this.addSQLObject(selFF, ffName); |
} else { |
this.addRequiredSQLObject(selFF, ffName); |
/trunk/OpenConcerto/src/org/openconcerto/erp/core/humanresources/payroll/report/FichePayeSheetXML.java |
---|
220,11 → 220,11 |
tauxPatLigne = sqlRowAccessor.getBigDecimal("TAUX_PAT"); |
} |
if (tauxSalLigne.signum() > 0) { |
if (tauxSalLigne.signum() > 0 && montantSalLigne.signum() != 0) { |
ligneSimplifiee.put("TAUX_SAL", tauxSalBulletinSimpl.add(tauxSalLigne)); |
} |
if (tauxPatLigne.signum() > 0) { |
if (tauxPatLigne.signum() > 0 && montantPatLigne.signum() != 0) { |
ligneSimplifiee.put("TAUX_PAT", tauxPatBulletinSimpl.add(tauxPatLigne)); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/element/objet/ClasseCompte.java |
---|
14,8 → 14,7 |
package org.openconcerto.erp.element.objet; |
import org.openconcerto.erp.config.ComptaPropsConfiguration; |
import org.openconcerto.sql.Configuration; |
import org.openconcerto.sql.model.SQLBase; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
30,12 → 29,12 |
private static List<ClasseCompte> liste; |
public static void loadClasseCompte() { |
SQLBase base = ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete(); |
public static void loadClasseCompte(ComptaPropsConfiguration conf) { |
DBRoot base = conf.getRootSociete(); |
SQLTable classeCompteTable = base.getTable("CLASSE_COMPTE"); |
SQLSelect selClasse = new SQLSelect(base); |
SQLSelect selClasse = new SQLSelect(); |
selClasse.addSelect(classeCompteTable.getField("ID")); |
selClasse.addSelect(classeCompteTable.getField("NOM")); |
45,7 → 44,7 |
String reqClasse = selClasse.asString(); |
System.err.println(reqClasse); |
List<Map<String, Object>> obClasse = base.getDataSource().execute(reqClasse); |
List<Map<String, Object>> obClasse = base.getDBSystemRoot().getDataSource().execute(reqClasse); |
liste = new ArrayList<ClasseCompte>(); |
for (Map<String, Object> map : obClasse) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/panel/compta/AbstractExport.java |
---|
29,6 → 29,7 |
import java.io.IOException; |
import java.io.OutputStream; |
import java.text.DateFormat; |
import java.text.ParseException; |
import java.text.SimpleDateFormat; |
import java.util.Date; |
170,7 → 171,7 |
protected abstract int fetchData(Date from, Date to, SQLRow selectedJournal, boolean onlyNew); |
protected abstract void export(final OutputStream out) throws IOException; |
protected abstract void export(final OutputStream out) throws IOException, ParseException; |
public static final String fixedLengthLeftAlign(final String str, final int fixedWidth) { |
if (str.length() >= fixedWidth) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/panel/compta/ExportToQuadraCompta.java |
---|
New file |
0,0 → 1,162 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.panel.compta; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLRow; |
import org.openconcerto.sql.model.SQLSelect; |
import org.openconcerto.sql.model.SQLTable; |
import org.openconcerto.utils.StringUtils; |
import java.io.IOException; |
import java.io.OutputStream; |
import java.io.OutputStreamWriter; |
import java.io.Writer; |
import java.nio.charset.Charset; |
import java.text.ParseException; |
import java.text.SimpleDateFormat; |
import java.util.Date; |
import java.util.List; |
import org.apache.commons.dbutils.handlers.ArrayListHandler; |
public class ExportToQuadraCompta extends AbstractExport { |
private static final Charset CHARSET = StringUtils.Cp1252; |
private List<Object[]> data; |
protected ExportToQuadraCompta(DBRoot rootSociete) { |
super(rootSociete, "QuadraCompta", ".txt"); |
} |
@Override |
protected int fetchData(Date from, Date to, SQLRow selectedJournal, boolean onlyNew) { |
final SQLTable tableEcriture = getEcritureT(); |
final SQLTable tableMouvement = tableEcriture.getForeignTable("ID_MOUVEMENT"); |
final SQLTable tableCompte = tableEcriture.getForeignTable("ID_COMPTE_PCE"); |
final SQLTable tableJrnl = tableEcriture.getForeignTable("ID_JOURNAL"); |
final SQLTable tablePiece = tableMouvement.getForeignTable("ID_PIECE"); |
final SQLSelect sel = createSelect(from, to, selectedJournal, onlyNew); |
sel.addSelect(tableCompte.getField("NUMERO")); |
sel.addSelect(tableJrnl.getField("CODE")); |
sel.addSelect(tableEcriture.getField("DATE")); |
sel.addSelect(tableEcriture.getField("NOM")); |
sel.addSelect(tableEcriture.getField("DEBIT")); |
sel.addSelect(tableEcriture.getField("CREDIT")); |
sel.addSelect(tablePiece.getField("NOM")); |
@SuppressWarnings("unchecked") |
final List<Object[]> l = (List<Object[]>) this.getRootSociete().getDBSystemRoot().getDataSource().execute(sel.asString(), new ArrayListHandler()); |
this.data = l; |
return l == null ? 0 : l.size(); |
} |
@Override |
protected void export(OutputStream out) throws IOException, ParseException { |
final Writer bufOut = new OutputStreamWriter(out, CHARSET); |
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyy"); |
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
for (final Object[] array : this.data) { |
bufOut.write("M"); |
bufOut.write(matchStringToFixedLength(array[0],8,'0', true, false )); |
bufOut.write(matchStringToFixedLength(array[1],2,' ')); |
bufOut.write("000"); |
Date date1 = simpleDateFormat.parse(String.valueOf(array[2]).trim()); |
bufOut.write(dateFormat.format(date1)); |
bufOut.write(" "); |
bufOut.write(matchStringToFixedLength("",20,' ')); |
long debit = ((Number)array[4]).longValue(); |
long credit = ((Number)array[5]).longValue(); |
// Exception si débit et crédit > 0 |
bufOut.write(getDebitOrCredit(debit,credit)); |
bufOut.write(getAmountSign(getAmount(debit,credit))); |
bufOut.write(matchStringToFixedLength(getAmount(debit,credit),12,'0', false, false)); |
bufOut.write(matchStringToFixedLength("",44,' ')); |
bufOut.write(matchStringToFixedLength(array[6],8,' ',false, true)); |
bufOut.write("EUR"); |
bufOut.write(matchStringToFixedLength(array[1],3,' ')); |
bufOut.write(matchStringToFixedLength(array[3],30,' ', false, false)); |
bufOut.write(matchStringToFixedLength("",12,' ')); |
bufOut.write("\r\n"); |
} |
bufOut.flush(); |
} |
/** |
* Adapte une chaine à une longueur (champs à longueur fixe). |
* @param : un objet que l'on va transformer en chaine. |
* @param : une longueur. |
* @param : un caractère pour le remplissage si la chaine est plus petite que la longueur fixée. |
* @param : placement du remplissage, true = à droite. |
* @param : le coté de la chaine à garder, true = à droite. |
* |
*/ |
private String matchStringToFixedLength(Object o, int length, char filler, boolean fillRight, boolean keepRight) { |
String str = String.valueOf(o).trim(); |
if(str.length() >= length) { |
if(keepRight) { |
return str.substring(str.length()-length, str.length()); |
}else { |
return str.substring(0,length); |
} |
}else { |
String format; |
if(fillRight) { |
format = "%-"+length+"s"; |
}else { |
format = "%"+length+"s"; |
} |
return String.format(format, str).replace(' ',filler); |
} |
} |
private String matchStringToFixedLength(Object o, int length, char filler) { |
return matchStringToFixedLength(o, length, filler, true, true); |
} |
private String getDebitOrCredit(final long debit, final long credit) { |
if(debit > 0 && credit > 0) { |
throw new IllegalStateException("Both credit and debit"); |
}else if(debit == 0) { |
return "C"; |
}else { |
return "D"; |
} |
} |
private String getAmountSign(final long amount) { |
if(amount < 0) { |
return "-"; |
}else { |
return "+"; |
} |
} |
private long getAmount(final long debit, final long credit) { |
if(debit > 0) { |
return debit; |
}else { |
return credit; |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/panel/compta/ExportEBP_ComptaPro.java |
---|
160,5 → 160,6 |
bufOut.write(StringUtils.getFixedWidthString(amount, wAmount, Side.RIGHT, false)); |
bufOut.write("\r\n"); |
} |
bufOut.flush(); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/panel/compta/ExportPanel.java |
---|
99,6 → 99,12 |
return new ExportSageEtendu(root); |
} |
}, |
QUADRACOMPTA("Quadratus : Export des écritures vers QuadraCompta") { |
@Override |
public AbstractExport createExport(DBRoot root) { |
return new ExportToQuadraCompta(root); |
} |
}, |
CCMX("Cegid CCMX") { |
@Override |
public AbstractExport createExport(DBRoot root) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/utils/LowerCaseFormat.java |
---|
New file |
0,0 → 1,49 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.utils; |
import java.text.FieldPosition; |
import java.text.Format; |
import java.text.ParsePosition; |
public class LowerCaseFormat extends Format { |
@Override |
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) { |
// TODO Auto-generated method stub |
System.err.println("ToAppendTo " + toAppendTo + " --- Obj" + obj); |
if (obj != null) { |
return new StringBuffer(obj.toString().toLowerCase()); |
} |
return null; |
} |
@Override |
public Object parseObject(String source, ParsePosition pos) { |
int i = pos.getIndex(); |
source = source.toLowerCase(); |
for (; i < source.length(); i++) { |
final char charAt = source.charAt(i); |
if (charAt < 'a' || charAt > 'z') { |
return source; |
} |
pos.setIndex(i); |
} |
pos.setIndex(i); |
System.err.println("Source " + source); |
return source; |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/utils/LowerCaseFormatFilter.java |
---|
New file |
0,0 → 1,112 |
/* |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
* |
* Copyright 2011 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.utils; |
import java.text.Format; |
import java.text.ParsePosition; |
import javax.swing.text.AttributeSet; |
import javax.swing.text.BadLocationException; |
import javax.swing.text.Document; |
import javax.swing.text.DocumentFilter; |
public class LowerCaseFormatFilter extends DocumentFilter { |
/** |
* Whether <code>s</code> is valid, ie if <code>s</code> is completely parsed by <code>f</code> |
* and the parsed object belongs to <code>c</code>. |
* |
* @param s the string to test. |
* @param f the format s must use. |
* @param c the class of the object returned by f. |
* @return <code>true</code> if s is valid. |
*/ |
static public final boolean isValid(String s, Format f, Class<?> c) { |
final ParsePosition pp = new ParsePosition(0); |
final Object o = f.parseObject(s, pp); |
return c.isInstance(o) && pp.getIndex() == s.length(); |
} |
static private final String subString(Document doc, int offset) throws BadLocationException { |
return doc.getText(offset, doc.getLength() - offset); |
} |
private final Format format; |
private final Class<?> c; |
/** |
* Create a new instance. |
* |
* @param f the format the document has to comply. |
* @param c the class the format has to parse to. |
*/ |
public LowerCaseFormatFilter() { |
this.format = new LowerCaseFormat(); |
this.c = String.class; |
} |
public final void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { |
string = string.toLowerCase(); |
final String newString = fb.getDocument().getText(0, offset) + string + subString(fb.getDocument(), offset); |
if (this.isValid(newString)) |
fb.insertString(offset, string, attr); |
} |
public final void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { |
text = text.toLowerCase(); |
final String newString = fb.getDocument().getText(0, offset) + text + subString(fb.getDocument(), offset + length); |
if (this.isValid(newString)) |
fb.replace(offset, length, text, attrs); |
} |
public final boolean isValid(String s) { |
return this.isPartialValid(s) || isCompleteValid(s); |
} |
public final boolean isCompleteValid(String s) { |
return isValid(s, this.getFormat(), this.c); |
} |
public boolean isPartialValid(String s) { |
return false; |
} |
public String getValidationText(String s) { |
if (this.isCompleteValid(s)) |
return s + " est valide"; |
else if (this.isPartialValid(s)) |
return getPartialValidationText(s); |
else |
return s + " n'est pas du tout valide"; |
} |
protected String getPartialValidationText(String s) { |
return s + " n'est que partiellement valide"; |
} |
public final Format getFormat() { |
return this.format; |
} |
/** |
* Let the subclass choose an appropriate string representation (must be parseable by the |
* format). |
* |
* @param o the object to format. |
* @return its string representation. |
*/ |
public String format(Object o) { |
return this.getFormat().format(o); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/erp/preferences/UIPreferencePanel.java |
---|
40,6 → 40,8 |
import javax.swing.UnsupportedLookAndFeelException; |
import javax.swing.border.LineBorder; |
import com.formdev.flatlaf.FlatLightLaf; |
public class UIPreferencePanel extends DefaultLocalPreferencePanel { |
private static final String UI_PROPERTIES = "ui.properties"; |
61,10 → 63,12 |
final GridBagConstraints c = new DefaultGridBagConstraints(); |
c.fill = GridBagConstraints.NONE; |
this.add(new JLabel("Look"), c); |
comboLook = new JComboBox(new String[] { "natif du système", "Nimbus" }); |
comboLook = new JComboBox(new String[] { "natif du système", "Nimbus", "Flat" }); |
String look = this.properties.getProperty(UI_LOOK); |
if (look != null && !look.equals("system")) { |
if (look != null && look.equals("nimbus")) { |
comboLook.setSelectedIndex(1); |
} else if (look != null && look.equals("flat")) { |
comboLook.setSelectedIndex(2); |
} else { |
comboLook.setSelectedIndex(0); |
} |
211,8 → 215,10 |
AlternateTableCellRenderer.setDefaultMap(Collections.singletonMap(Color.WHITE, background)); |
if (this.comboLook.getSelectedIndex() == 0) { |
properties.setProperty(UI_LOOK, "system"); |
} else if (this.comboLook.getSelectedIndex() == 1) { |
properties.setProperty(UI_LOOK, "nimbus"); |
} else { |
properties.setProperty(UI_LOOK, "nimbus"); |
properties.setProperty(UI_LOOK, "flat"); |
} |
if (this.comboDPI.getSelectedIndex() == 1) { |
272,8 → 278,9 |
final String look = properties.getProperty(UI_LOOK); |
final String nimbusClassName = getNimbusClassName(); |
if (look != null && look.equals("system")) { |
if (look != null && look.equals("flat")) { |
FlatLightLaf.install(); |
} else if (look != null && look.equals("system")) { |
useSystemLF(); |
} else if (look != null && look.equals("nimbus")) { |
useNimbusLF(); |
280,7 → 287,7 |
} else if (nimbusClassName == null || !System.getProperty("os.name", "??").toLowerCase().contains("linux")) { |
useSystemLF(); |
} else { |
useNimbusLF(); |
FlatLightLaf.install(); |
} |
final String dpi = properties.getProperty(UI_DPI); |
if (dpi != null && dpi.length() > 0 && !dpi.equalsIgnoreCase("1")) { |
/trunk/OpenConcerto/src/org/openconcerto/erp/preferences/TemplateNXProps.java |
---|
53,6 → 53,7 |
import org.openconcerto.task.config.ComptaBasePropsConfiguration; |
import org.openconcerto.ui.preferences.TemplateProps; |
import org.openconcerto.utils.StreamUtils; |
import org.openconcerto.utils.prog.VMLauncher; |
import java.io.File; |
import java.io.IOException; |
134,6 → 135,8 |
register(DemandePrixSheetXML.TEMPLATE_ID, DemandePrixSheetXML.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("DEMANDE_PRIX")); |
register(DevisXmlSheet.TEMPLATE_ID, DevisXmlSheet.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("DEVIS")); |
register(VenteFactureXmlSheet.TEMPLATE_ID, VenteFactureXmlSheet.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("SAISIE_VENTE_FACTURE")); |
register(VenteFactureXmlSheet.TEMPLATE_ID + VenteFactureXmlSheet.TEMPLATE_SITUATION_SUFFIX, VenteFactureXmlSheet.TEMPLATE_PROPERTY_NAME, |
AbstractGenerationDocumentPreferencePanel.getLabelFromTable("SAISIE_VENTE_FACTURE") + " " + VenteFactureXmlSheet.TEMPLATE_SITUATION_SUFFIX); |
register(CommandeClientXmlSheet.TEMPLATE_ID, CommandeClientXmlSheet.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("COMMANDE_CLIENT")); |
register(BonLivraisonXmlSheet.TEMPLATE_ID, BonLivraisonXmlSheet.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("BON_DE_LIVRAISON")); |
register(AvoirClientXmlSheet.TEMPLATE_ID, AvoirClientXmlSheet.TEMPLATE_PROPERTY_NAME, AbstractGenerationDocumentPreferencePanel.getLabelFromTable("AVOIR_CLIENT")); |
229,6 → 232,8 |
if (property != null) { |
File storage = new File(property); |
((DefaultLocalTemplateProvider) provider).setBaseDirectory(storage); |
} else if (VMLauncher.getJPackageAppDir() != null) { |
((DefaultLocalTemplateProvider) provider).setBaseDirectory(new File(VMLauncher.getJPackageAppDir(), "Configuration/Template/Default")); |
} |
} else { |
provider = new DefaultCloudTemplateProvider(configuration.getSocieteID()); |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/translation_fr.xml |
---|
189,7 → 189,9 |
<!-- Matching --> |
<action id="financing.accouning.entries.source.show" label="Voir la source" /> |
<action id="financing.accouning.entries.match" label="Lettrer" /> |
<action id="financing.accouning.entries.match.partial" label="Lettrer partiel" /> |
<action id="financing.accouning.entries.unmatch" label="Délettrer" /> |
<action id="financing.accouning.entries.unmatch.partial" label="Délettrer partiel" /> |
<!-- Invoice --> |
<item id="sales.invoice.number" label="Numéro" /> |
<item id="sales.invoice.date" label="Date" /> |
250,8 → 252,18 |
<item id="customerrelationship.customer.identifier" label="Code" /> |
<item id="customerrelationship.customer.date" label="Date" /> |
<item id="customerrelationship.customer.customproduct" label="Réf. Art. Interne" /> |
<item id="customerrelationship.customer.customtarif" label="Remises client" /> |
<item id="customerrelationship.customer.customtarif" label="Remises client sur article" /> |
<item id="customerrelationship.customer.customfamilytarif" label="Remises client sur famille d'article" /> |
<!-- Agence --> |
<item id="customerrelationship.customer.agency" label="Agences" /> |
<item id="customerrelationship.customer.agencies" label="Liste des agences" /> |
<item id="customerrelationship.customer.agency.designation" label="Designation" /> |
<item id="customerrelationship.customer.agency.phone1" label="Téléphone" /> |
<item id="customerrelationship.customer.agency.email" label="E-Mail" /> |
<item id="customerrelationship.customer.agency.fax" label="Fax" /> |
<item id="customerrelationship.customer.agency.customer" label="Client" /> |
<item id="customerrelationship.customer.agency.address" label="Adresse de l'agence" /> |
<!-- Currency --> |
<item id="currency.USD" label="Dollar américain" /> |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/mappingCompta_fr.xml |
---|
12,6 → 12,22 |
<FIELD name="MONTANT" label="Montant" /> |
<FIELD name="ID_MOUVEMENT" label="Mouvement" /> |
</element> |
<element refid="customerrelationship.customer.category" nameClass="feminine" name="catégorie de client"> |
<FIELD name="name" label="Nom" /> |
</element> |
<element refid="sales.customer.product.qty.price" nameClass="masculine" name="tarif client"> |
<FIELD name="QUANTITE" label="Quantité" /> |
<FIELD name="ID_ARTICLE" label="Article" /> |
<FIELD name="ID_CLIENT" label="Client" /> |
<FIELD name="POURCENT_REMISE" label="% remise" /> |
</element> |
<element refid="sales.customer.product.family.qty.price" nameClass="masculine" |
name="tarif famille d'article client"> |
<FIELD name="QUANTITE" label="Quantité" /> |
<FIELD name="ID_FAMILLE_ARTICLE" label="Famille article" /> |
<FIELD name="ID_CLIENT" label="Client" /> |
<FIELD name="POURCENT_REMISE" label="% remise" /> |
</element> |
<element refid="address" nameClass="feminine" name="adresse"> |
<FIELD name="TYPE" label="Type" /> |
<FIELD name="LIBELLE" label="Libellé" /> |
291,6 → 307,7 |
<FIELD name="T_DEVISE" label="Total Devise" /> |
<FIELD name="ID_MODELE" label="Modèle" /> |
<FIELD name="T_ECO_CONTRIBUTION" label="Dont Eco-Contrib." /> |
<FIELD name="ID_TAXE_PORT" label="Taxe sur port" /> |
</element> |
<element refid="sales.credit.item" nameClass="masculine" name="élément d'avoir" namePlural="éléments d'avoir"> |
<FIELD name="ID_DEPOT_STOCK" label="Dépôt Stock" /> |
365,6 → 382,7 |
<FIELD name="DATE" label="Date d'intervention" /> |
<FIELD name="DATE_FIN" label="Date de fin d'intervention" /> |
<FIELD name="POURCENT_SERVICE" label="Pourcentage service" /> |
<FIELD name="ID_TAXE_PORT" label="Taxe sur port" /> |
</element> |
<element refid="supplychain.credit.note" nameClass="feminine" name="facture d'avoir fournisseur" |
namePlural="factures d'avoir fournisseur"> |
467,7 → 485,7 |
<FIELD name="ID_TAXE" label="Taxe" /> |
<FIELD name="POIDS" label="Poids UV net" /> |
<FIELD name="PRIX_METRIQUE_VT_1" label="P.V. UV HT" /> |
<FIELD name="PRIX_METRIQUE_HA_1" label="P.A. UV² HT" /> |
<FIELD name="PRIX_METRIQUE_HA_1" label="P.A. UV HT" /> |
<FIELD name="VALEUR_METRIQUE_1" label="Longueur par défaut" /> |
<FIELD name="ID_METRIQUE_1" label="Métrique" /> |
<FIELD name="PRIX_METRIQUE_VT_2" label="P.V. HT au mètre" /> |
486,6 → 504,7 |
<FIELD name="ID_STYLE" label="Style" /> |
<FIELD name="SERVICE" label="Service" /> |
<FIELD name="ID_MODE_VENTE_ARTICLE" label="Mode de vente" /> |
<FIELD name="ID_FAMILLE_ARTICLE" label="Famille" /> |
</element> |
<element refid="sales.shipment.delivery.note" nameClass="masculine" name="bon de livraison" |
namePlural="bons de livraison"> |
516,6 → 535,7 |
<FIELD name="ID_MODELE" label="Modèle" /> |
<FIELD name="T_ECO_CONTRIBUTION" label="Dont Eco-Contrib." /> |
<FIELD name="invoiceProgress" label="Avancement facturation" /> |
<FIELD name="ID_COMMERCIAL" label="Commercial" /> |
</element> |
<element refid="sales.shipment.item" nameClass="masculine" name="élément de bon de livraison" |
namePlural="éléments de bon de livraison"> |
1011,7 → 1031,7 |
</element> |
<element refid="humanresources.payroll.contract.employe" nameClass="masculine" name="contrat salarié" |
namePlural="contrats salariés"> |
<FIELD name="ID_DIPLOME_PREPARE" label="Diplôme préparé (S21.G00.30.025)" /> |
<FIELD name="ID_CODE_AMENAGEMENT_PARTIEL" label="Aménagement temps partiel (S21.G00.40.078)" /> |
<FIELD name="ID_CODE_SUSPENSION" label="Motif de suspension (S21.G00.65.001)" /> |
<FIELD name="DATE_FIN_SUSPENSION" label="Fin de supension (S21.G00.65.003)" /> |
1216,8 → 1236,10 |
<FIELD name="T_PA_HT" label="Total achat HT" /> |
<FIELD name="T_POIDS" label="Poids total net" /> |
<FIELD name="ID_MODE_VENTE_ARTICLE" label="Mode de vente" /> |
<FIELD name="POURCENT_ACOMPTE" label="% Acompte" /> |
<FIELD name="LIVRE" label="Livré" /> |
<FIELD name="QTE_LIVREE" label="Qté livrée" /> |
<FIELD name="LIVRE_FORCED" label="Livraison forcée" /> |
</element> |
<element refid="humanresources.employe.salesman" nameClass="masculine" name="commercial"> |
<FIELD name="ID_POLE_PRODUIT" label="Pôle produit" /> |
1310,6 → 1332,7 |
<FIELD name="ID_FABRICANT" label="Fabricant" /> |
<FIELD name="ID_UNITE_VENTE" label="Unité de vente" /> |
<FIELD name="QTE" label="Quantité" /> |
<FIELD name="QTE_RECUE" label="Qté recues" /> |
<FIELD name="QTE_UNITAIRE" label="Quantité unitaire" /> |
<FIELD name="REPERE" label="Repère" /> |
<FIELD name="EN_STOCK" label="En stock" /> |
1713,6 → 1736,7 |
</element> |
<element refid="sales.order.facturation" nameClass="masculine" name="terme de facturation de commande client" |
namePlural="termes de facturation commandes clients"> |
<FIELD name="NOM" label="Désignation" /> |
<FIELD name="ID_SAISIE_VENTE_FACTURE" label="Facture" /> |
<FIELD name="ID_COMMANDE_CLIENT" label="Commande" /> |
<FIELD name="ID_TYPE_REGLEMENT" label="Type règlement" /> |
1729,7 → 1753,8 |
namePlural="factures fournisseur"> |
<FIELD name="DATE_REGLEMENT" label="Date de règlement" /> |
<FIELD name="TVA_ADJUSTMENT" label="Ajustement de TVA" /> |
<FIELD name="ID_AVOIR_FOURNISSEUR" label="Avoir" /> |
<FIELD name="ID_AVOIR_FOURNISSEUR" label="Avoir N°1" /> |
<FIELD name="ID_AVOIR_FOURNISSEUR_2" label="Avoir N°2" /> |
<FIELD name="NET_A_PAYER" label="Net à payer" /> |
<FIELD name="ID_TAXE_PORT" label="Taxe sur port" /> |
<FIELD name="PORT_HT" label="Frais de port HT" /> |
1770,6 → 1795,7 |
<FIELD name="ID_CODE_FOURNISSEUR" label="Code Fournisseur" /> |
<FIELD name="ID_UNITE_VENTE" label="Unité de vente" /> |
<FIELD name="ID_ARTICLE" label="Article" /> |
<FIELD name="ID_FAMILLE_ARTICLE" label="Famille" /> |
<FIELD name="ID_DEVISE" label="Devise" /> |
<FIELD name="PA_DEVISE" label="PA Devise" /> |
<FIELD name="PA_DEVISE_T" label="PA Devise Total" /> |
2041,6 → 2067,7 |
<FIELD name="DATE" label="Date" /> |
<FIELD name="ID_ARTICLE" label="Article" /> |
<FIELD name="REEL" label="Réel" /> |
<FIELD name="ID_STOCK" label="Stock" /> |
</element> |
<element refid="finance.accounting.account.kind" nameClass="feminine" name="nature du compte" |
namePlural="natures du compte"> |
2338,7 → 2365,7 |
<FIELD name="ANALYTIQUE" label="Analytique" /> |
<FIELD name="NUMERO" label="N° compte" /> |
<FIELD name="NOM" label="Compte" /> |
<FIELD name="NOM_ECRITURE" label="libellé écriture" /> |
<FIELD name="NOM_ECRITURE" label="Libellé écriture" /> |
<FIELD name="DEBIT" label="Débit" /> |
<FIELD name="CREDIT" label="Crédit" /> |
<FIELD name="ID_ECRITURE" label="Ecriture" /> |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/fieldmapping.xml |
---|
7,7 → 7,14 |
<field id="customerrelationship.country" name="ID_PAYS" /> |
<field id="customerrelationship.phone" name="PHONE" /> |
</table> |
<table id="customerrelationship.customer.agency" name="AGENCE"> |
<field id="customerrelationship.customer.agency.designation" name="DESIGNATION" /> |
<field id="customerrelationship.customer.agency.phone1" name="TEL_1" /> |
<field id="customerrelationship.customer.agency.email" name="EMAIL" /> |
<field id="customerrelationship.customer.agency.fax" name="FAX" /> |
<field id="customerrelationship.customer.agency.customer" name="ID_CLIENT" /> |
<field id="customerrelationship.customer.agency.address" name="ID_ADRESSE" /> |
</table> |
<table id="sales.invoice" name="SAISIE_VENTE_FACTURE"> |
<field id="sales.invoice.number" name="NUMERO" /> |
<field id="sales.invoice.date" name="DATE" /> |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/DSNInstallationUtils.java |
---|
161,6 → 161,33 |
} |
} |
if (!root.contains("DIPLOME_PREPARE")) { |
final SQLCreateTable createTableDiplome = new SQLCreateTable(root, "DIPLOME_PREPARE"); |
createTableDiplome.addVarCharColumn("CODE", 25); |
createTableDiplome.addVarCharColumn("NOM", 512); |
try { |
root.getBase().getDataSource().execute(createTableDiplome.asString()); |
insertUndef(createTableDiplome); |
root.refetchTable("DIPLOME_PREPARE"); |
root.getSchema().updateVersion(); |
final SQLTable table = root.getTable("DIPLOME_PREPARE"); |
List<Tuple2<String, String>> v = new ArrayList<Tuple2<String, String>>(); |
v.add(Tuple2.create("03", "Niveau de formation équivalent au CAP (certificat d'aptitude professionnelle) ou au BEP (brevet d'études professionnelles)")); |
v.add(Tuple2.create("04", "Formation de niveau du bac (général, technologique ou professionnel), du brevet de technicien (BT) ou du brevet professionnel")); |
v.add(Tuple2.create("05", "Formation de niveau bac+2 : licence 2, BTS (brevet de technicien supérieur), DUT (diplôme universitaire de technologie), etc.")); |
v.add(Tuple2.create("06", "Formation de niveau bac+3 et bac+4 : licence 3, licence professionnelle, master 1, etc.")); |
v.add(Tuple2.create("07", "Formation de niveau bac+5 : master 2, diplôme d'études approfondies, diplôme d'études supérieures spécialisées, diplôme d'ingénieur, etc.")); |
v.add(Tuple2.create("08", "Formation de niveau bac+8 : doctorat, habilitation à diriger des recherches, etc. ")); |
insertValues(v, table); |
} catch (SQLException ex) { |
throw new IllegalStateException("Erreur lors de la création de la table " + "DIPLOME_PREPARE", ex); |
} |
} |
if (!root.contains("TYPE_PREAVIS")) { |
final SQLCreateTable createTableMotif = new SQLCreateTable(root, "TYPE_PREAVIS"); |
createTableMotif.addVarCharColumn("CODE", 25); |
1652,6 → 1679,14 |
root.getSchema().updateVersion(); |
} |
if (!tableContrat.contains("ID_DIPLOME_PREPARE")) { |
updateContrat = true; |
AlterTable alter = new AlterTable(tableContrat); |
alter.addForeignColumn("ID_DIPLOME_PREPARE", root.findTable("DIPLOME_PREPARE")); |
root.getBase().getDataSource().execute(alter.asString()); |
root.getSchema().updateVersion(); |
} |
if (updateContrat) { |
root.refetchTable("CONTRAT_SALARIE"); |
tableContrat = root.findTable("CONTRAT_SALARIE"); |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/ComptaPropsConfiguration.java |
---|
26,6 → 26,7 |
import org.openconcerto.erp.core.common.element.SocieteCommonSQLElement; |
import org.openconcerto.erp.core.common.element.StyleSQLElement; |
import org.openconcerto.erp.core.common.element.TitrePersonnelSQLElement; |
import org.openconcerto.erp.core.customerrelationship.customer.element.AgenceSQLElement; |
import org.openconcerto.erp.core.customerrelationship.customer.element.ClientDepartementSQLElement; |
import org.openconcerto.erp.core.customerrelationship.customer.element.ComptaContactSQLElement.ContactAdministratifSQLElement; |
import org.openconcerto.erp.core.customerrelationship.customer.element.ComptaContactSQLElement.ContactFournisseurSQLElement; |
122,6 → 123,7 |
import org.openconcerto.erp.core.humanresources.payroll.element.CumulsCongesSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.CumulsPayeSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.DSNNatureSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.DiplomePrepareSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.FichePayeElementSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.FichePayeSQLElement; |
import org.openconcerto.erp.core.humanresources.payroll.element.ImpressionRubriqueSQLElement; |
176,6 → 178,7 |
import org.openconcerto.erp.core.sales.product.element.ArticleFournisseurSecondaireSQLElement; |
import org.openconcerto.erp.core.sales.product.element.ArticleTarifSQLElement; |
import org.openconcerto.erp.core.sales.product.element.CoutRevientSQLElement; |
import org.openconcerto.erp.core.sales.product.element.CustomerProductFamilyQtyPriceSQLElement; |
import org.openconcerto.erp.core.sales.product.element.CustomerProductQtyPriceSQLElement; |
import org.openconcerto.erp.core.sales.product.element.EcoContributionSQLElement; |
import org.openconcerto.erp.core.sales.product.element.FamilleArticleSQLElement; |
273,7 → 276,9 |
import org.openconcerto.erp.injector.BonFactureEltSQLInjector; |
import org.openconcerto.erp.injector.BonFactureSQLInjector; |
import org.openconcerto.erp.injector.BonReceptionFactureFournisseurSQLInjector; |
import org.openconcerto.erp.injector.BrEltFactEltSQLInjector; |
import org.openconcerto.erp.injector.BrFactureAchatSQLInjector; |
import org.openconcerto.erp.injector.CmdEltFactEltSQLInjector; |
import org.openconcerto.erp.injector.CommandeBlEltSQLInjector; |
import org.openconcerto.erp.injector.CommandeBlSQLInjector; |
import org.openconcerto.erp.injector.CommandeBrEltSQLInjector; |
786,6 → 791,7 |
dir.addSQLElement(TypeTauxPasSQLElement.class, root); |
dir.addSQLElement(CodeAmenagementPartielSQLElement.class, root); |
dir.addSQLElement(CodeSuspensionSQLElement.class, root); |
dir.addSQLElement(DiplomePrepareSQLElement.class, root); |
// ECO |
dir.addSQLElement(FamilleEcoContributionSQLElement.class, root); |
832,6 → 838,7 |
dir.addSQLElement(AttachmentSQLElement.class); |
dir.addSQLElement(CustomerProductQtyPriceSQLElement.class); |
dir.addSQLElement(CustomerProductFamilyQtyPriceSQLElement.class); |
dir.addSQLElement(EtatStockSQLElement.class); |
dir.addSQLElement(EtatStockItemSQLElement.class); |
dir.addSQLElement(ArticleTarifSQLElement.class); |
854,6 → 861,7 |
dir.addSQLElement(ContactSalarieSQLElement.class); |
dir.addSQLElement(new TitrePersonnelSQLElement()); |
dir.addSQLElement(new ContactSQLElement()); |
dir.addSQLElement(new AgenceSQLElement(this.getRootSociete())); |
dir.addSQLElement(new SaisieKmItemSQLElement()); |
dir.addSQLElement(new EcritureSQLElement()); |
1105,6 → 1113,8 |
new DevisBlEltSQLInjector(rootSociete); |
new DevisBlSQLInjector(rootSociete); |
new CommandeBlEltSQLInjector(rootSociete); |
new CmdEltFactEltSQLInjector(rootSociete); |
new BrEltFactEltSQLInjector(rootSociete); |
new CommandeBrEltSQLInjector(rootSociete); |
new CommandeBlSQLInjector(rootSociete); |
new BonFactureSQLInjector(rootSociete); |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/DefaultMenuConfiguration.java |
---|
96,6 → 96,7 |
import org.openconcerto.erp.core.reports.stat.action.EvolutionCmdCumulAction; |
import org.openconcerto.erp.core.reports.stat.action.EvolutionMargeAction; |
import org.openconcerto.erp.core.reports.stat.action.ReportingCommercialAction; |
import org.openconcerto.erp.core.reports.stat.action.ReportingCommercialFournisseurAction; |
import org.openconcerto.erp.core.reports.stat.action.VenteArticleFamilleGraphAction; |
import org.openconcerto.erp.core.reports.stat.action.VenteArticleGraphAction; |
import org.openconcerto.erp.core.reports.stat.action.VenteArticleMargeGraphAction; |
117,6 → 118,7 |
import org.openconcerto.erp.core.sales.invoice.action.NouveauSaisieVenteComptoirAction; |
import org.openconcerto.erp.core.sales.invoice.action.NouveauSaisieVenteFactureAction; |
import org.openconcerto.erp.core.sales.invoice.report.ReportingClientPanel; |
import org.openconcerto.erp.core.sales.invoice.report.SituationCompteClientPanel; |
import org.openconcerto.erp.core.sales.order.action.ListeDesCommandesClientAction; |
import org.openconcerto.erp.core.sales.order.action.ListeDesCommandesClientItemsAction; |
import org.openconcerto.erp.core.sales.order.action.ListeDesElementsACommanderClientAction; |
391,7 → 393,6 |
gCustomer.addItem("customer.payment.list"); |
gCustomer.addItem("customer.payment.followup.list"); |
gCustomer.addItem("customer.payment.check.pending.list"); |
gCustomer.addItem("customer.payment.check.deposit.list"); |
gCustomer.addItem("customer.payment.check.pending.create"); |
gCustomer.addItem("customer.payment.check.deposit.list"); |
gCustomer.addItem("customer.credit.check.list"); |
423,6 → 424,7 |
group.addItem("order.list.reporting"); |
group.addItem("sales.list.report"); |
group.addItem("sales.list.salesman.report"); |
group.addItem("sales.list.salesman.supplier.report"); |
group.addItem("sales.product.graph"); |
group.addItem("sales.product.margin.graph"); |
group.addItem("sales.product.family.graph"); |
731,6 → 733,7 |
mManager.putAction(new EvolutionCmdCumulAction(), "sales.graph.cmd.cumulate"); |
mManager.putAction(new ReportingCommercialAction(conf.getRootSociete()), "sales.list.salesman.report"); |
mManager.putAction(new ReportingCommercialFournisseurAction(conf), "sales.list.salesman.supplier.report"); |
mManager.putAction(new EvolutionMargeAction(), "sales.margin.graph"); |
mManager.putAction(new GenReportingVenteAction(false), "sales.list.reporting"); |
788,6 → 791,15 |
} |
}, "customer.payment.report"); |
mManager.putAction(new AbstractAction("Situation Client") { |
@Override |
public void actionPerformed(ActionEvent arg0) { |
PanelFrame frame = new PanelFrame(new SituationCompteClientPanel(conf), "Situation client"); |
frame.setVisible(true); |
} |
}, "customer.payment.details"); |
mManager.putAction(new ListeDesEncaissementsAction(), "customer.payment.list"); |
mManager.putAction(new ListeDesRelancesAction(), "customer.payment.followup.list"); |
mManager.putAction(new ListeDesChequesAEncaisserAction(), "customer.payment.check.pending.list"); |
/trunk/OpenConcerto/src/org/openconcerto/erp/config/update/Updater_1_5.java |
---|
29,6 → 29,7 |
import org.openconcerto.erp.core.supplychain.stock.element.DepotStockSQLElement; |
import org.openconcerto.erp.core.supplychain.stock.element.StockItem; |
import org.openconcerto.sql.changer.convert.AddMDFields; |
import org.openconcerto.sql.model.AliasedTable; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLField; |
import org.openconcerto.sql.model.SQLField.Properties; |
80,6 → 81,24 |
tableCompte.fetchFields(); |
} |
// Champ obsolete sur compte |
SQLTable tableTitre = root.getTable("TITRE_PERSONNEL"); |
if (!tableTitre.contains("OBSOLETE")) { |
final AlterTable alter = new AlterTable(tableTitre); |
alter.addBooleanColumn("OBSOLETE", Boolean.FALSE, false); |
tableTitre.getBase().getDataSource().execute(alter.asString()); |
tableTitre.getSchema().updateVersion(); |
tableTitre.fetchFields(); |
final UpdateBuilder updBuilder = new UpdateBuilder(tableTitre).setObject(tableTitre.getField("OBSOLETE"), Boolean.TRUE); |
updBuilder.setWhere(new Where(tableTitre.getField("CODE"), "=", "Mlle")); |
tableTitre.getBase().getDataSource().execute(updBuilder.asString()); |
final UpdateBuilder updBuilder2 = new UpdateBuilder(tableTitre).setObject(tableTitre.getField("CODE"), "M."); |
updBuilder2.setWhere(new Where(tableTitre.getField("CODE"), "=", "Mr")); |
tableTitre.getBase().getDataSource().execute(updBuilder2.asString()); |
} |
// Transaction du solde |
if (!root.contains(COMPTE_CLIENT_TRANSACTION)) { |
final SQLCreateTable createTable = new SQLCreateTable(root, COMPTE_CLIENT_TRANSACTION); |
231,7 → 250,7 |
createTable.addVarCharColumn("TAG", 128); |
createTable.addIntegerColumn("VERSION", 0); |
createTable.addVarCharColumn("HASH", 32); |
createTable.addBooleanColumn("ENCRYPTED", Boolean.FALSE, false); |
try { |
root.getBase().getDataSource().execute(createTable.asString()); |
InstallationPanel.insertUndef(createTable); |
267,7 → 286,13 |
tableAttachment.getSchema().updateVersion(); |
tableAttachment.fetchFields(); |
} |
if (!tableAttachment.contains("ENCRYPTED")) { |
final AlterTable alter = new AlterTable(tableAttachment); |
alter.addBooleanColumn("ENCRYPTED", Boolean.FALSE, false); |
tableAttachment.getBase().getDataSource().execute(alter.asString()); |
tableAttachment.getSchema().updateVersion(); |
tableAttachment.fetchFields(); |
} |
List<String> gedTable = Arrays.asList("CLIENT", "MOUVEMENT", "FOURNISSEUR", "ARTICLE", "FACTURE_FOURNISSEUR", "SAISIE_VENTE_FACTURE", "SALARIE"); |
for (String string : gedTable) { |
SQLTable tableGED = root.getTable(string); |
409,7 → 434,6 |
root.getSchema().updateVersion(); |
UpdateBuilder build = new UpdateBuilder(tableCmdFElt); |
build.setObject("RECU", Boolean.FALSE); |
build.set("QTE_RECUE", "\"QTE\"*\"QTE_UNITAIRE\""); |
Where w = Where.createRaw(tableCmdFElt.getField("QTE_RECUE").getQuotedName() + " < (" + tableCmdFElt.getField("QTE").getQuotedName() + "*" |
+ tableCmdFElt.getField("QTE_UNITAIRE").getQuotedName() + ")", tableCmdFElt.getField("QTE_UNITAIRE"), tableCmdFElt.getField("QTE"), tableCmdFElt.getField("QTE_RECUE")); |
2286,8 → 2310,118 |
tableEtatStock.getSchema().updateVersion(); |
tableEtatStock.fetchFields(); |
} |
// Création de la table Agence |
if (!root.contains("AGENCE")) { |
SQLCreateTable createAgence = new SQLCreateTable(root, "AGENCE"); |
createAgence.addVarCharColumn("DESIGNATION", 256); |
createAgence.addVarCharColumn("TEL_1", 256); |
createAgence.addVarCharColumn("EMAIL", 256); |
createAgence.addVarCharColumn("FAX", 256); |
createAgence.addForeignColumn("ID_CLIENT", root.findTable("CLIENT")); |
createAgence.addForeignColumn("ID_ADRESSE", root.findTable("ADRESSE")); |
try { |
// test |
root.getBase().getDataSource().execute(createAgence.asString()); |
root.refetchTable("AGENCE"); |
SQLRowValues rowVals = new SQLRowValues(root.getTable("AGENCE")); |
SQLRow rowInserted = rowVals.commit(); |
SQLTable.setUndefID(root.getSchema(), "AGENCE", rowInserted.getID()); |
tableDevis.getSchema().updateVersion(); |
} catch (SQLException ex) { |
throw new IllegalStateException("Erreur lors de la création de la table AGENCE", ex); |
} |
} |
// Tarification client par famille article |
if (root.getTable("TARIF_FAMILLE_ARTICLE_CLIENT") == null) { |
final SQLCreateTable createTableQtyTarif = new SQLCreateTable(root, "TARIF_FAMILLE_ARTICLE_CLIENT"); |
createTableQtyTarif.addForeignColumn("ID_FAMILLE_ARTICLE", root.getTable("FAMILLE_ARTICLE")); |
createTableQtyTarif.addForeignColumn("ID_CLIENT", root.getTable("CLIENT")); |
createTableQtyTarif.addDecimalColumn("QUANTITE", 16, 3, BigDecimal.ONE, false); |
createTableQtyTarif.addDecimalColumn("POURCENT_REMISE", 16, 3, null, true); |
// createTableQtyTarif.addDecimalColumn("PRIX_METRIQUE_VT_1", 16, 6, null, true); |
try { |
root.getBase().getDataSource().execute(createTableQtyTarif.asString()); |
InstallationPanel.insertUndef(createTableQtyTarif); |
root.refetchTable("TARIF_FAMILLE_ARTICLE_CLIENT"); |
root.getSchema().updateVersion(); |
} catch (SQLException ex) { |
throw new IllegalStateException("Erreur lors de la création de la table " + "TARIF_FAMILLE_ARTICLE_CLIENT", ex); |
} |
} |
// Tarification client par famille article |
if (root.getTable("TARIF_FAMILLE_ARTICLE_CLIENT") == null) { |
final SQLCreateTable createTableQtyTarif = new SQLCreateTable(root, "TARIF_FAMILLE_ARTICLE_CLIENT"); |
createTableQtyTarif.addForeignColumn("ID_FAMILLE_ARTICLE", root.getTable("FAMILLE_ARTICLE")); |
createTableQtyTarif.addForeignColumn("ID_CLIENT", root.getTable("CLIENT")); |
createTableQtyTarif.addDecimalColumn("QUANTITE", 16, 3, BigDecimal.ONE, false); |
createTableQtyTarif.addDecimalColumn("POURCENT_REMISE", 16, 3, null, true); |
// createTableQtyTarif.addDecimalColumn("PRIX_METRIQUE_VT_1", 16, 6, null, true); |
try { |
root.getBase().getDataSource().execute(createTableQtyTarif.asString()); |
InstallationPanel.insertUndef(createTableQtyTarif); |
root.refetchTable("TARIF_FAMILLE_ARTICLE_CLIENT"); |
root.getSchema().updateVersion(); |
} catch (SQLException ex) { |
throw new IllegalStateException("Erreur lors de la création de la table " + "TARIF_FAMILLE_ARTICLE_CLIENT", ex); |
} |
} |
SQLTable tableAvoirC = root.getTable("AVOIR_CLIENT"); |
if (!tableAvoirC.contains("ID_TAXE_PORT")) { |
final AlterTable alterB = new AlterTable(tableAvoirC); |
alterB.addForeignColumn("ID_TAXE_PORT", root.getTable("TAXE")); |
root.getBase().getDataSource().execute(alterB.asString()); |
root.refetchTable(tableAvoirC.getName()); |
root.getSchema().updateVersion(); |
} |
SQLTable tableVF = root.getTable("SAISIE_VENTE_FACTURE"); |
if (!tableVF.contains("ID_FACTURATION_COMMANDE_CLIENT")) { |
final AlterTable alter = new AlterTable(tableVF); |
final SQLTable tableFacturationCommandeClient = tableVF.getDBRoot().getTable("FACTURATION_COMMANDE_CLIENT"); |
alter.addForeignColumn("ID_FACTURATION_COMMANDE_CLIENT", tableFacturationCommandeClient); |
tableVF.getBase().getDataSource().execute(alter.asString()); |
tableVF.getSchema().updateVersion(); |
tableVF.fetchFields(); |
// update ID_FACTURATION_COMMANDE |
UpdateBuilder builder = new UpdateBuilder(tableVF); |
AliasedTable ref = new AliasedTable(tableFacturationCommandeClient, "tf"); |
builder.addBackwardVirtualJoin(ref, "ID_SAISIE_VENTE_FACTURE"); |
builder.setFromVirtualJoinField("ID_FACTURATION_COMMANDE_CLIENT", "tf", tableFacturationCommandeClient.getKey().getName()); |
tableVF.getBase().getDataSource().execute(builder.asString()); |
} |
if (!root.getTable("NUMEROTATION_AUTO").contains("CODE_LETTRAGE_PARTIEL")) { |
final AlterTable alterNumero = new AlterTable(root.getTable("NUMEROTATION_AUTO")); |
alterNumero.addVarCharColumn("CODE_LETTRAGE_PARTIEL", 256); |
root.getBase().getDataSource().execute(alterNumero.asString()); |
root.refetchTable("NUMEROTATION_AUTO"); |
root.getSchema().updateVersion(); |
} |
if (!root.getTable("ECRITURE").contains("LETTRAGE_PARTIEL")) { |
final AlterTable alterEcriture = new AlterTable(root.getTable("ECRITURE")); |
alterEcriture.addVarCharColumn("LETTRAGE_PARTIEL", 256); |
root.getBase().getDataSource().execute(alterEcriture.asString()); |
root.refetchTable("ECRITURE"); |
root.getSchema().updateVersion(); |
} |
SQLTable tableFactureF = root.getTable("FACTURE_FOURNISSEUR"); |
if (!tableFactureF.contains("ID_AVOIR_FOURNISSEUR_2")) { |
final AlterTable alter = new AlterTable(tableFactureF); |
final SQLTable tableAvoirF = tableVF.getDBRoot().getTable("AVOIR_FOURNISSEUR"); |
alter.addForeignColumn("ID_AVOIR_FOURNISSEUR_2", tableAvoirF); |
tableFactureF.getBase().getDataSource().execute(alter.asString()); |
tableFactureF.getSchema().updateVersion(); |
tableVF.fetchFields(); |
} |
} |
public static void initStock(SQLRow rowArticle, int idDepot) { |
SQLSelect selStock = new SQLSelect(); |
/trunk/OpenConcerto/src/org/openconcerto/erp/modules/ModulePackager.java |
---|
216,7 → 216,7 |
final JarEntry e = entries.nextElement(); |
if (!e.getName().startsWith("META-INF")) { |
// use copy-constructor to keep all fields |
zip(out, new JarEntry(e), f.getInputStream(e)); |
zip(out, new JarEntry(e.getName()), f.getInputStream(e)); |
} |
} |
} finally { |
/trunk/OpenConcerto/src/org/openconcerto/erp/modules/ComponentsContext.java |
---|
17,6 → 17,7 |
import org.openconcerto.sql.element.SQLElementDirectory; |
import org.openconcerto.sql.model.DBRoot; |
import org.openconcerto.sql.model.SQLName; |
import org.openconcerto.sql.sqlobject.SQLRequestComboBox; |
import org.openconcerto.sql.sqlobject.SQLTextCombo; |
import org.openconcerto.sql.view.DropManager; |
import org.openconcerto.sql.view.FileDropHandler; |
24,6 → 25,7 |
import org.openconcerto.utils.ListMap; |
import java.util.Set; |
import java.util.function.Supplier; |
import javax.swing.text.JTextComponent; |
73,9 → 75,9 |
} |
} |
public final void putAdditionalField(final String tableName, final String name, final JTextComponent comp) { |
public final void putAdditionalTextField(final String tableName, final String name, final Supplier<? extends JTextComponent> comp) { |
final SQLElement elem = checkField(tableName, name); |
if (elem.putAdditionalField(name, comp)) { |
if (elem.putAdditionalTextField(name, comp)) { |
this.fields.add(elem, name); |
} else { |
throw new IllegalStateException("Already added " + name + " in " + elem); |
82,9 → 84,9 |
} |
} |
public final void putAdditionalField(final String tableName, final String name, final SQLTextCombo comp) { |
public final void putAdditionalTextCombo(final String tableName, final String name, final Supplier<? extends SQLTextCombo> comp) { |
final SQLElement elem = checkField(tableName, name); |
if (elem.putAdditionalField(name, comp)) { |
if (elem.putAdditionalTextCombo(name, comp)) { |
this.fields.add(elem, name); |
} else { |
throw new IllegalStateException("Already added " + name + " in " + elem); |
91,6 → 93,15 |
} |
} |
public final void putAdditionalCombo(final String tableName, final String name, final Supplier<? extends SQLRequestComboBox> comp) { |
final SQLElement elem = checkField(tableName, name); |
if (elem.putAdditionalCombo(name, comp)) { |
this.fields.add(elem, name); |
} else { |
throw new IllegalStateException("Already added " + name + " in " + elem); |
} |
} |
final ListMap<SQLElement, String> getFields() { |
return this.fields; |
} |
/trunk/OpenConcerto/src/org/openconcerto/ql/QLPrinter.java |
---|
23,10 → 23,12 |
import java.net.InetAddress; |
import java.net.Socket; |
import java.net.UnknownHostException; |
import java.nio.charset.StandardCharsets; |
import javax.imageio.ImageIO; |
public class QLPrinter { |
private static final int ESC = 0x1B; |
private String host; |
private boolean highQuality; |
private boolean paperCutAuto; |
49,7 → 51,7 |
/** |
* Set print width (in milimeters) |
* */ |
*/ |
public void setPrintWidth(int mm) { |
this.printWidth = mm; |
} |
77,16 → 79,18 |
for (int i = 0; i < 200; i++) { |
out.write(0x00); |
} |
// Init 0x1B 0x40 |
out.write(0x1B); |
out.write(0x40); |
// ?? : 0x1B 0x69 0x61 0x01 |
out.write(0x1B); |
// Select ESCP/P Mode : 0x1B 0x69 0x61 0x01 |
out.write(ESC); |
out.write(0x69); |
out.write(0x61); |
out.write(0x01); |
// Init 0x1B 0x40 |
out.write(ESC); |
out.write(0x40); |
// Page Length |
out.write(0x1B); |
out.write(ESC); |
out.write(0x69); |
out.write(0x7A); |
101,8 → 105,8 |
out.write(0); |
out.write(0); |
out.write(0); |
// Paper Cut |
out.write(0x1B); |
// Paper Cut : ESC i |
out.write(ESC); |
out.write(0x69); |
out.write(0x4D); |
if (this.paperCutAuto) { |
111,13 → 115,13 |
out.write(0x00); |
} |
// ?? : 0x1B 0x69 0x41 0x01 |
out.write(0x1B); |
// ?? : 0x1B 0x69 0x41 0x01 :ESC i A |
out.write(ESC); |
out.write(0x69); |
out.write(0x41); |
out.write(0x01); |
// Set Mode |
out.write(0x1B); |
// Set Mode : ESC i K |
out.write(ESC); |
out.write(0x69); |
out.write(0x4B); |
if (!this.highQuality) { |
126,7 → 130,7 |
out.write(0x48); |
} |
// Set Margin |
out.write(0x1B); |
out.write(ESC); |
out.write(0x69); |
out.write(0x64); |
out.write(0x00); |
332,6 → 336,7 |
out.close(); |
in.close(); |
socket.close(); |
System.out.println("QLPrinter.print() done"); |
} |
} |
346,4 → 351,92 |
return cfA; |
} |
/** |
* Print 2D barcode (DataMatrix) |
* |
* @param dotsPerCell (3 - 10) |
* @param barcode : barcode (ascii) |
* @throws IOException |
* |
*/ |
public void printDataMatrixBarCode2D(int dotsPerCell, String barcode) throws IOException { |
if (barcode.length() > (144 * 144)) { |
throw new IllegalArgumentException("barcode too long (max : 144x144:20736)"); |
} |
ByteArrayOutputStream out = new ByteArrayOutputStream(); |
{ |
// Header: 0x00 : 200 fois |
for (int i = 0; i < 200; i++) { |
out.write(0x00); |
} |
} |
// Select ESCP/P Mode : 0x1B 0x69 0x61 0x00 |
out.write(ESC); |
out.write(0x69); |
out.write(0x61); |
out.write(0x00); // mode ESC/P standard |
// Init 0x1B 0x40 |
out.write(ESC); |
out.write(0x40); |
// ESC i D |
out.write(ESC); |
out.write(0x69); |
out.write(0x44); |
// |
out.write(dotsPerCell); |
out.write(0); // square |
out.write(0); // vertical size : auto |
out.write(0); // horizontal size : auto |
for (int i = 0; i < 5; i++) { |
out.write(0); // reserved |
} |
// data |
out.write(barcode.getBytes(StandardCharsets.US_ASCII)); |
out.write('\\'); |
out.write('\\'); |
out.write('\\'); |
// Page feed |
out.write(0x0C); |
out.flush(); |
final byte[] byteArray = out.toByteArray(); |
print(byteArray); |
} |
public void print(String string) throws IOException { |
ByteArrayOutputStream bOut = new ByteArrayOutputStream(); |
// Select ESCP/P Mode : 0x1B 0x69 0x61 0x00 |
bOut.write(ESC); |
bOut.write(0x69); |
bOut.write(0x61); |
bOut.write(0x0); // mode ESC/P standard |
// Init 0x1B 0x40 |
bOut.write(ESC); |
bOut.write(0x40); |
// Init |
bOut.write(ESC); |
bOut.write(0x40); |
// French characters |
bOut.write(ESC); |
bOut.write(0x52); |
bOut.write(0x01); |
// Normal |
bOut.write(ESC); |
bOut.write(0x21); |
bOut.write(0);// Default |
bOut.write(string.getBytes(StandardCharsets.US_ASCII)); |
bOut.write(0x0A);// Retour a la ligne |
// Page feed |
bOut.write(0x0C); |
print(bOut.toByteArray()); |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/ql/QLPrinterExample.java |
---|
18,15 → 18,19 |
public class QLPrinterExample { |
public static void main(String[] args) { |
QLPrinter prt = new QLPrinter("192.168.1.103"); |
QLPrinter prt = new QLPrinter("192.168.168.53"); |
prt.setHighQuality(true); |
try { |
prt.print(new File("Hello_720x300.png")); |
String code = "123456789"; |
prt.printDataMatrixBarCode2D(10, code); |
prt.print("Hello"); |
} catch (IOException e) { |
e.printStackTrace(); |
} |
} |
} |
/trunk/OpenConcerto/src/org/openconcerto/openoffice/generation/ReportGeneration.java |
---|
39,13 → 39,14 |
import java.util.Map.Entry; |
import java.util.Stack; |
import java.util.concurrent.Callable; |
import java.util.concurrent.ExecutionException; |
import java.util.concurrent.FutureTask; |
import java.util.concurrent.TimeoutException; |
import org.jdom.Element; |
import org.jdom.JDOMException; |
import org.jdom.filter.Filter; |
import net.jcip.annotations.GuardedBy; |
import ognl.Ognl; |
import ognl.OgnlException; |
import ognl.OgnlRuntime; |
87,9 → 88,11 |
// Inheritable to allow generators to spawn threads |
private final InheritableThreadLocal<ReportPart> currentParts; |
private final InheritableThreadLocal<DocumentGenerator> currentGenerator; |
@GuardedBy("this") |
private Throwable interruptCause; |
// tous les générateurs s'exécuter dans ce groupe |
private final ThreadGroup thg; |
@GuardedBy("this") |
private List<Thread> thg; |
private final List<PropertyChangeListener> taskListeners; |
private final PropertyChangeListener taskListener; |
private Map<String, Object> commonData; |
109,11 → 112,7 |
this.currentParts = new InheritableThreadLocal<ReportPart>(); |
this.currentGenerator = new InheritableThreadLocal<DocumentGenerator>(); |
this.interruptCause = null; |
this.thg = new ThreadGroup("Generateurs") { |
public void uncaughtException(Thread t, Throwable e) { |
ReportGeneration.this.interrupt(e); |
} |
}; |
this.thg = null; |
this.taskListeners = new ArrayList<PropertyChangeListener>(); |
this.taskListener = new PropertyChangeListener() { |
198,6 → 197,7 |
public final Map<String, ODSingleXMLDocument> generateMulti() throws Throwable { |
synchronized (this) { |
this.interruptCause = null; |
this.thg = new ArrayList<>(); |
} |
Map<String, ODSingleXMLDocument> f = null; |
206,17 → 206,34 |
return createDocument(); |
} |
}); |
final Thread thr = new Thread(this.thg, future); |
// Don't pass a ThreadGroup, since every thread created, including "cache timeout", JDBC |
// threads will be in it. But these threads must out-live this generation. |
final Thread thr = new Thread(null, future); |
this.registerThread(thr); |
thr.start(); |
try { |
thr.join(); |
f = future.get(); |
} catch (Exception e) { |
if (isInterruptedExn(e) || (e instanceof ExecutionException && isInterruptedExn(e.getCause()))) |
f = null; |
else |
assert f == null; |
// If one thread was interrupted (or failed), interrupt the others |
this.interrupt(e); |
} finally { |
// Make sure all threads are stopped and don't prevent this from being garbage |
// collected. |
final List<Thread> toJoin; |
synchronized (this) { |
toJoin = this.thg; |
this.thg = null; |
} |
for (final Thread t : toJoin) { |
// If no exception occurred, then should already be finished but if there was one in |
// a thread, another thread might be stuck on some I/O for a while before it can |
// process the interrupt. |
t.join(4500); |
if (t.isAlive()) |
throw new TimeoutException("Thread still not terminated : " + t); |
} |
} |
final Map<String, ODSingleXMLDocument> res; |
synchronized (this) { |
236,14 → 253,20 |
return res; |
} |
public final synchronized void registerThread(final Thread thr) { |
this.thg.add(thr); |
} |
protected final void interrupt(Throwable cause) { |
synchronized (this) { |
if (this.interruptCause == null) { |
this.interruptCause = cause; |
this.thg.interrupt(); |
for (final Thread thr : this.thg) { |
thr.interrupt(); |
} |
} |
} |
} |
private Map<String, ODSingleXMLDocument> createDocument() throws IOException, OgnlException, InterruptedException { |
// recompute common data for each run |
276,6 → 299,7 |
if (part instanceof ForkReportPart) { |
GenThread thread = new GenThread(part.getName(), ((ForkReportPart) part).getChildren()); |
forked.put(part.getName(), thread); |
this.registerThread(thread); |
thread.start(); |
} else if (part instanceof SubReportPart) { |
final SubReportPart subReportPart = (SubReportPart) part; |
/trunk/OpenConcerto/src/org/openconcerto/openoffice/generation/view/BaseGenerationRapport.java |
---|
59,9 → 59,12 |
import javax.swing.JPanel; |
import javax.swing.JScrollPane; |
import javax.swing.SwingUtilities; |
import javax.swing.SwingWorker; |
import org.jdom.JDOMException; |
import net.jcip.annotations.GuardedBy; |
/** |
* A panel to choose a ReportType, see the tasks of the generation, and optionnaly open the |
* document. NOTE: you have to call {@link #enableGeneration(boolean)} before being able to |
95,11 → 98,11 |
private JList<GenerationTask> tasksView; |
private final JLabel status; |
// le groupe dans lequel doivent être toutes les thread de la génération |
private final ThreadGroup thg; |
@GuardedBy("EDT") |
private SwingWorker<Void, Void> generationWorker; |
public BaseGenerationRapport() throws JDOMException, IOException { |
this.thg = new ThreadGroup(this + " thread group"); |
this.generationWorker = null; |
this.status = new JLabel(); |
this.setStatus("Inactif"); |
} |
234,7 → 237,8 |
*/ |
public final void interrupt() { |
// pas de threads active, quand pas génération |
this.thg.interrupt(); |
if (this.generationWorker != null) |
this.generationWorker.cancel(true); |
} |
class GenerateAction implements ActionListener { |
246,21 → 250,22 |
enableGeneration(false); |
final FileAction sel = (FileAction) BaseGenerationRapport.this.fileActionCombo.getSelectedItem(); |
// "génération..." |
new Thread(BaseGenerationRapport.this.thg, new Runnable() { |
BaseGenerationRapport.this.generationWorker = new SwingWorker<Void, Void>() { |
@Override |
public void run() { |
protected Void doInBackground() throws Exception { |
generate(sel); |
return null; |
} |
@Override |
protected void done() { |
// toujours le faire, même si interrompu |
SwingUtilities.invokeLater(new Runnable() { |
@Override |
public void run() { |
enableGeneration(true); |
} |
}); |
}; |
BaseGenerationRapport.this.generationWorker.execute(); |
} |
}).start(); |
} |
} |
protected final void enableGeneration(final boolean b) { |
this.fileActionCombo.setEnabled(b); |
267,7 → 272,6 |
this.genererButton.setEnabled(b); |
} |
// doit s'exécuter dans this.thg |
protected final void generate(final FileAction sel) { |
final ReportType type = (ReportType) this.typeRapportComboSelection.getSelectedItem(); |
final R rg = this.createGeneration(type); |
/trunk/OpenConcerto/src/org/openconcerto/openoffice/ODFrame.java |
---|
13,6 → 13,7 |
package org.openconcerto.openoffice; |
import org.openconcerto.openoffice.spreadsheet.BytesProducer; |
import org.openconcerto.openoffice.text.TextNode; |
import java.math.BigDecimal; |
28,6 → 29,20 |
*/ |
public class ODFrame<D extends ODDocument> extends ImmutableDocStyledNode<GraphicStyle, D> { |
static public Element createEmpty(XMLVersion ns, final Number w, final Number h, final LengthUnit unit) { |
return createEmpty(ns, BigDecimal.ZERO, BigDecimal.ZERO, w, h, unit); |
} |
static public Element createEmpty(XMLVersion ns, final Number x, final Number y, final Number w, final Number h, final LengthUnit unit) { |
final Namespace svgNS = ns.getNS("svg"); |
final Element res = new Element("frame", ns.getNS("draw")); |
res.setAttribute("x", unit.format(x), svgNS); |
res.setAttribute("y", unit.format(y), svgNS); |
res.setAttribute("width", unit.format(w), svgNS); |
res.setAttribute("height", unit.format(h), svgNS); |
return res; |
} |
/** |
* Parse SVG and OD length. |
* |
120,4 → 135,36 |
public final LengthUnit getUnit() { |
return LengthUnit.MM; |
} |
public final void addImage(final String name, final BytesProducer data) { |
final Element imageElem = new Element("image", getElement().getNamespace("draw")); |
this.getElement().addContent(imageElem); |
this.putImage(imageElem, name, data); |
} |
private final void putImage(final Element imageElem, final String name, final BytesProducer data) { |
final String imgPath = "Pictures/" + name + (data.getFormat() != null ? "." + data.getFormat() : ""); |
imageElem.setAttribute("href", imgPath, this.getODDocument().getVersion().getNS("xlink")); |
this.getODDocument().getPackage().putFile(imgPath, data.getBytes(this)); |
} |
public final void setImage(final String name, final BytesProducer data, final boolean allowAdd) { |
final Element |