OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Compare Revisions

Regard whitespace Rev 57 → Rev 58

/trunk/OpenConcerto/src/org/openconcerto/erp/generationDoc/gestcomm/EtatVentesXmlSheet.java
14,23 → 14,23
package org.openconcerto.erp.generationDoc.gestcomm;
 
import org.openconcerto.erp.generationDoc.AbstractListeSheetXml;
import org.openconcerto.erp.generationDoc.DocumentLocalStorageManager;
import org.openconcerto.erp.generationDoc.SheetXml;
import org.openconcerto.erp.preferences.PrinterNXProps;
import org.openconcerto.sql.Configuration;
import org.openconcerto.sql.element.SQLElement;
import org.openconcerto.sql.element.SQLElementDirectory;
import org.openconcerto.sql.model.AliasedField;
import org.openconcerto.sql.model.AliasedTable;
import org.openconcerto.sql.model.SQLRow;
import org.openconcerto.sql.model.SQLRowListRSH;
import org.openconcerto.sql.model.SQLSelect;
import org.openconcerto.sql.model.SQLTable;
import org.openconcerto.sql.model.Where;
import org.openconcerto.utils.Tuple2;
 
import java.io.File;
import java.sql.Timestamp;
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;
41,13 → 41,15
/**
* Statistique des ventes d'articles
*
* @author Ludo
*
*/
public class EtatVentesXmlSheet extends AbstractListeSheetXml {
 
private static final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
private static final String MODE2 = "mod2";
 
private static final String MODE1 = "mod1";
 
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yy");
 
public static final String TEMPLATE_ID = "EtatVentes";
 
public static final String TEMPLATE_PROPERTY_NAME = DEFAULT_PROPERTY_NAME;
56,17 → 58,22
 
public EtatVentesXmlSheet(Date du, Date au) {
this.printer = PrinterNXProps.getInstance().getStringProperty("BonPrinter");
du.setHours(0);
du.setMinutes(0);
au.setHours(23);
au.setMinutes(59);
this.du = new Timestamp(du.getTime());
this.au = new Timestamp(au.getTime());
final Calendar c1 = Calendar.getInstance();
c1.setTime(du);
c1.set(Calendar.HOUR_OF_DAY, 0);
c1.set(Calendar.MINUTE, 0);
c1.set(Calendar.SECOND, 0);
 
final Calendar c2 = Calendar.getInstance();
c2.setTime(au);
c2.set(Calendar.HOUR_OF_DAY, 23);
c2.set(Calendar.MINUTE, 59);
c2.set(Calendar.SECOND, 59);
this.du = new Timestamp(c1.getTimeInMillis());
this.au = new Timestamp(c2.getTimeInMillis());
 
}
 
 
 
@Override
public String getDefaultTemplateId() {
return TEMPLATE_ID;
78,82 → 85,116
}
 
protected void createListeValues() {
SQLElement elt = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE_ELEMENT");
SQLElement elt2 = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE");
SQLElement eltEnc = Configuration.getInstance().getDirectory().getElement("ENCAISSER_MONTANT");
SQLElement elt3 = Configuration.getInstance().getDirectory().getElement("TICKET_CAISSE");
SQLElement eltMod = Configuration.getInstance().getDirectory().getElement("MODE_REGLEMENT");
AliasedTable table1 = new AliasedTable(eltMod.getTable(), "mod1");
AliasedTable tableTicket = new AliasedTable(elt3.getTable(), "ticket");
AliasedTable table2 = new AliasedTable(eltMod.getTable(), "mod2");
final SQLElementDirectory directory = Configuration.getInstance().getDirectory();
final SQLElement eltVenteFacutreElement = directory.getElement("SAISIE_VENTE_FACTURE_ELEMENT");
final SQLElement eltVenteFacture = directory.getElement("SAISIE_VENTE_FACTURE");
final SQLElement eltEncaissement = directory.getElement("ENCAISSER_MONTANT");
final SQLElement eltTicketCaisse = directory.getElement("TICKET_CAISSE");
final SQLElement eltModeReglement = directory.getElement("MODE_REGLEMENT");
final SQLTable tableModeReglement = eltModeReglement.getTable();
final SQLTable tableFactureElement = eltVenteFacutreElement.getTable();
final SQLTable tableFacture = eltVenteFacture.getTable();
final AliasedTable tableModeReglement1 = new AliasedTable(tableModeReglement, MODE1);
final AliasedTable tableModeReglement2 = new AliasedTable(tableModeReglement, MODE2);
final AliasedTable tableTicket = new AliasedTable(eltTicketCaisse.getTable(), "ticket");
 
// Caisse et facture
// Requete Pour obtenir les quantités pour chaque type de réglement
SQLSelect sel = new SQLSelect(Configuration.getInstance().getBase());
sel.addSelect(elt.getTable().getField("NOM"));
sel.addSelect(elt.getTable().getField("T_PA_HT"), "SUM");
sel.addSelect(elt.getTable().getField("T_PV_HT"), "SUM");
sel.addSelect(elt.getTable().getField("T_PV_TTC"), "SUM");
 
sel.addSelect(elt.getTable().getField("QTE"), "SUM");
sel.addSelect(elt.getTable().getField("CODE"));
sel.addSelect(tableFactureElement.getField("CODE"));
sel.addSelect(tableFactureElement.getField("NOM"));
 
Where w = new Where(elt.getTable().getField("ID_TICKET_CAISSE"), "=", 1);
sel.addJoin("LEFT", elt.getTable().getField("ID_SAISIE_VENTE_FACTURE")).setWhere(w);
// Elements assosciés à une facture
Where w = new Where(tableFactureElement.getField("ID_TICKET_CAISSE"), "=", tableTicket.getTable().getUndefinedID());
sel.addJoin("LEFT", tableFactureElement.getField("ID_SAISIE_VENTE_FACTURE")).setWhere(w);
 
Where w2 = new Where(elt.getTable().getField("ID_SAISIE_VENTE_FACTURE"), "=", 1);
// Elements associés à un ticket de caisse
Where w2 = new Where(tableFactureElement.getField("ID_SAISIE_VENTE_FACTURE"), "=", 1);
sel.addJoin("LEFT", tableFacture.getField("ID_MODE_REGLEMENT"), MODE1);
sel.addJoin("LEFT", tableFactureElement.getField("ID_TICKET_CAISSE"), "ticket").setWhere(w2);
 
sel.addJoin("LEFT", elt2.getTable().getField("ID_MODE_REGLEMENT"), "mod1");
sel.addBackwardJoin("LEFT", "enc", eltEncaissement.getTable().getField("ID_TICKET_CAISSE"), "ticket");
sel.addJoin("LEFT", new AliasedField(eltEncaissement.getTable().getField("ID_MODE_REGLEMENT"), "enc"), MODE2);
 
sel.addJoin("LEFT", elt.getTable().getField("ID_TICKET_CAISSE"), "ticket").setWhere(w2);
final String idTypeReglement1 = tableModeReglement1.getField("ID_TYPE_REGLEMENT").getFieldRef();
final String idTypeReglement2 = tableModeReglement2.getField("ID_TYPE_REGLEMENT").getFieldRef();
 
sel.addBackwardJoin("LEFT", "enc", eltEnc.getTable().getField("ID_TICKET_CAISSE"), "ticket");
sel.addJoin("LEFT", new AliasedField(eltEnc.getTable().getField("ID_MODE_REGLEMENT"), "enc"), "mod2");
final String qte = sel.getAlias(tableFactureElement.getField("QTE")).getFieldRef();
sel.addRawSelect("SUM(CASE WHEN " + idTypeReglement1 + "=2 OR " + idTypeReglement2 + "=2 THEN " + qte + " ELSE 0 END)", "Cheque");
sel.addRawSelect("SUM(CASE WHEN " + idTypeReglement1 + "=3 OR " + idTypeReglement2 + "=3 THEN " + qte + " ELSE 0 END)", "CB");
sel.addRawSelect("SUM(CASE WHEN " + idTypeReglement1 + "=4 OR " + idTypeReglement2 + "=4 THEN " + qte + " ELSE 0 END)", "Especes");
 
sel.addRawSelect(
"SUM(CASE WHEN " + table1.getField("ID_TYPE_REGLEMENT").getFieldRef() + " =2 OR " + table2.getField("ID_TYPE_REGLEMENT").getFieldRef() + "=2 THEN "
+ sel.getAlias(elt.getTable().getField("QTE")).getFieldRef() + " ELSE 0 END)", "Cheque");
sel.addRawSelect(
"SUM(CASE WHEN " + table1.getField("ID_TYPE_REGLEMENT").getFieldRef() + "=3 OR " + table2.getField("ID_TYPE_REGLEMENT").getFieldRef() + "=3 THEN "
+ sel.getAlias(elt.getTable().getField("QTE")).getFieldRef() + " ELSE 0 END)", "CB");
sel.addRawSelect(
"SUM(CASE WHEN " + table1.getField("ID_TYPE_REGLEMENT").getFieldRef() + "=4 OR " + table2.getField("ID_TYPE_REGLEMENT").getFieldRef() + "=4 THEN "
+ sel.getAlias(elt.getTable().getField("QTE")).getFieldRef() + " ELSE 0 END)", "Especes");
 
Where w3 = new Where(tableTicket.getField("DATE"), this.du, this.au);
Where w4 = new Where(elt2.getTable().getField("DATE"), this.du, this.au);
Where w4 = new Where(tableFacture.getField("DATE"), this.du, this.au);
sel.setWhere(w3.or(w4));
sel.addGroupBy(elt.getTable().getField("NOM"));
sel.addGroupBy(elt.getTable().getField("CODE"));
sel.addGroupBy(tableFactureElement.getField("NOM"));
sel.addGroupBy(tableFactureElement.getField("CODE"));
System.err.println(sel.asString());
 
// Requete pour obtenir les quantités vendus
SQLSelect selQte = new SQLSelect(Configuration.getInstance().getBase());
selQte.addSelect(tableFactureElement.getField("CODE"));
selQte.addSelect(tableFactureElement.getField("NOM"));
selQte.addSelect(tableFactureElement.getField("QTE"), "SUM");
selQte.addSelect(tableFactureElement.getField("T_PA_HT"), "SUM");
selQte.addSelect(tableFactureElement.getField("T_PV_HT"), "SUM");
selQte.addSelect(tableFactureElement.getField("T_PV_TTC"), "SUM");
selQte.addJoin("LEFT", tableFactureElement.getField("ID_SAISIE_VENTE_FACTURE")).setWhere(w);
selQte.addJoin("LEFT", tableFactureElement.getField("ID_TICKET_CAISSE"), "ticket").setWhere(w2);
selQte.setWhere(w3.or(w4));
selQte.addGroupBy(tableFactureElement.getField("NOM"));
selQte.addGroupBy(tableFactureElement.getField("CODE"));
 
List<Object[]> listeQte = (List<Object[]>) Configuration.getInstance().getBase().getDataSource().execute(selQte.asString(), new ArrayListHandler());
 
// Récupération des quantités et des montant totaux pour chaque article
Map<String, ArticleVendu> map = new HashMap<String, ArticleVendu>();
for (Object[] sqlRow : listeQte) {
String code = (String) sqlRow[0];
String nom = (String) sqlRow[1];
Number qteVendu = (Number) sqlRow[2];
Number ha = (Number) sqlRow[3];
Number ht = (Number) sqlRow[4];
Number ttc = (Number) sqlRow[5];
ArticleVendu a = new ArticleVendu(code, nom, qteVendu.intValue(), ht.longValue(), ha.longValue(), ttc.longValue());
map.put(code + "##" + nom, a);
}
 
List<Object[]> listeIds = (List<Object[]>) Configuration.getInstance().getBase().getDataSource().execute(sel.asString(), new ArrayListHandler());
 
if (listeIds == null) {
return;
}
 
// Liste des valeurs de la feuille OO
ArrayList<Map<String, Object>> listValues = new ArrayList<Map<String, Object>>(listeIds.size());
double totalTPA = 0;
double totalTPVTTC = 0;
 
long totalTPAInCents = 0;
long totalTPVTTCInCents = 0;
 
for (Object[] obj : listeIds) {
Map<String, Object> mValues = new HashMap<String, Object>();
mValues.put("NOM", obj[0]);
mValues.put("QTE", obj[4]);
final Double tPA = new Double(((Number) obj[1]).longValue() / 100.0);
mValues.put("T_PA", tPA);
final Double tPVHT = new Double(((Number) obj[2]).longValue() / 100.0);
mValues.put("T_PV_HT", tPVHT);
final Double TPVTTC = new Double(((Number) obj[3]).longValue() / 100.0);
mValues.put("T_PV_TTC", TPVTTC);
 
mValues.put("NB_CHEQUE", obj[6]);
mValues.put("NB_CB", obj[7]);
mValues.put("NB_ESPECES", obj[8]);
totalTPA += tPA;
totalTPVTTC += TPVTTC;
String code = (String) obj[0];
String nom = (String) obj[1];
ArticleVendu a = map.get(code + "##" + nom);
 
mValues.put("NOM", nom);
mValues.put("QTE", a.qte);
mValues.put("T_PA", (a.ha / 100.0D));
mValues.put("T_PV_HT", (a.ht / 100.0D));
mValues.put("T_PV_TTC", (a.ttc / 100.0D));
mValues.put("NB_CHEQUE", obj[2]);
mValues.put("NB_CB", obj[3]);
mValues.put("NB_ESPECES", obj[4]);
totalTPAInCents += a.ha;
totalTPVTTCInCents += a.ttc;
listValues.add(mValues);
System.out.println("EtatVentesXmlSheet.createListeValues():" + listValues);
}
 
// Liste des ventes comptoirs
final SQLTable venteComptoirT = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_COMPTOIR").getTable();
final SQLTable venteComptoirT = directory.getElement("SAISIE_VENTE_COMPTOIR").getTable();
SQLSelect selVC = new SQLSelect(venteComptoirT.getBase());
selVC.addSelect(venteComptoirT.getField("NOM"));
selVC.addSelect(venteComptoirT.getField("MONTANT_HT"), "SUM");
164,7 → 205,7
selVC.setWhere(wVC);
selVC.addGroupBy(venteComptoirT.getField("NOM"));
List<Object[]> listVC = (List<Object[]>) venteComptoirT.getDBSystemRoot().getDataSource().execute(selVC.asString(), new ArrayListHandler());
double totalVC = 0;
long totalVCInCents = 0;
if (listVC.size() > 0) {
Map<String, Object> mValues = new HashMap<String, Object>();
mValues.put("NOM", " ");
187,57 → 228,53
listValues.add(mValues2);
 
}
for (Object[] row : listVC) {
 
Map<String, Object> mValues = new HashMap<String, Object>();
 
mValues.put("NOM", row[0]);
final Double ht = new Double(((Number) row[1]).longValue() / 100.0);
final Double ttc = new Double(((Number) row[2]).longValue() / 100.0);
 
mValues.put("QTE", row[3]);
mValues.put("T_PV_HT", ht);
mValues.put("T_PV_TTC", ttc);
 
totalVC += ttc;
for (Object[] rowVenteComptoir : listVC) {
final Map<String, Object> mValues = new HashMap<String, Object>();
// Nom
mValues.put("NOM", rowVenteComptoir[0]);
// HT
mValues.put("T_PV_HT", ((Number) rowVenteComptoir[1]).longValue() / 100.0D);
// TTC
final long ttcInCents = ((Number) rowVenteComptoir[2]).longValue();
mValues.put("T_PV_TTC", ttcInCents / 100.0D);
totalVCInCents += ttcInCents;
// Quantité
mValues.put("QTE", rowVenteComptoir[3]);
listValues.add(mValues);
}
 
// Liste des Achats
ArrayList<Map<String, Object>> listValuesHA = new ArrayList<Map<String, Object>>(listeIds.size());
Map<String, Object> valuesHA = this.mapAllSheetValues.get(1);
if (valuesHA == null) {
valuesHA = new HashMap<String, Object>();
final ArrayList<Map<String, Object>> listValuesAchat = new ArrayList<Map<String, Object>>(listeIds.size());
Map<String, Object> valuesAchat = this.mapAllSheetValues.get(1);
if (valuesAchat == null) {
valuesAchat = new HashMap<String, Object>();
}
SQLElement eltAchat = Configuration.getInstance().getDirectory().getElement("SAISIE_ACHAT");
final SQLElement eltAchat = directory.getElement("SAISIE_ACHAT");
final SQLTable tableAchat = eltAchat.getTable();
final SQLSelect selAchat = new SQLSelect(Configuration.getInstance().getBase());
 
SQLSelect selAchat = new SQLSelect(Configuration.getInstance().getBase());
selAchat.addSelect(eltAchat.getTable().getField("NOM"));
selAchat.addSelect(eltAchat.getTable().getField("MONTANT_HT"), "SUM");
selAchat.addSelect(eltAchat.getTable().getField("MONTANT_TTC"), "SUM");
Where wHA = new Where(eltAchat.getTable().getField("DATE"), this.du, this.au);
selAchat.addSelect(tableAchat.getField("NOM"));
selAchat.addSelect(tableAchat.getField("MONTANT_HT"), "SUM");
selAchat.addSelect(tableAchat.getField("MONTANT_TTC"), "SUM");
final Where wHA = new Where(tableAchat.getField("DATE"), this.du, this.au);
selAchat.setWhere(wHA);
selAchat.addGroupBy(eltAchat.getTable().getField("NOM"));
selAchat.addGroupBy(tableAchat.getField("NOM"));
List<Object[]> listAchat = (List<Object[]>) Configuration.getInstance().getBase().getDataSource().execute(selAchat.asString(), new ArrayListHandler());
 
double totalHA = 0;
long totalAchatInCents = 0;
 
for (Object[] row : listAchat) {
 
Map<String, Object> mValues = new HashMap<String, Object>();
 
mValues.put("NOM", row[0]);
final Double ht = new Double(((Number) row[1]).longValue() / 100.0);
final Double pA = new Double(((Number) row[2]).longValue() / 100.0);
 
mValues.put("T_PV_HT", -ht);
mValues.put("T_PV_TTC", -pA);
 
totalHA -= pA;
listValuesHA.add(mValues);
long ht = ((Number) row[1]).longValue();
long pA = ((Number) row[2]).longValue();
mValues.put("T_PV_HT", -ht / 100.0D);
mValues.put("T_PV_TTC", -pA / 100.0D);
totalAchatInCents -= pA;
listValuesAchat.add(mValues);
}
 
totalTPVTTC += totalVC;
totalTPVTTCInCents += totalVCInCents;
 
// Récapitulatif
Map<String, Object> valuesE = this.mapAllSheetValues.get(2);
244,9 → 281,9
if (valuesE == null) {
valuesE = new HashMap<String, Object>();
}
SQLElement eltE = Configuration.getInstance().getDirectory().getElement("ENCAISSER_MONTANT");
SQLElement eltM = Configuration.getInstance().getDirectory().getElement("MODE_REGLEMENT");
SQLElement eltT = Configuration.getInstance().getDirectory().getElement("TYPE_REGLEMENT");
SQLElement eltE = directory.getElement("ENCAISSER_MONTANT");
SQLElement eltM = directory.getElement("MODE_REGLEMENT");
SQLElement eltT = directory.getElement("TYPE_REGLEMENT");
SQLSelect selE = new SQLSelect(Configuration.getInstance().getBase());
selE.addSelect(eltT.getTable().getField("NOM"));
selE.addSelect(eltT.getTable().getField("NOM"), "COUNT");
259,7 → 296,7
selE.addFieldOrder(eltT.getTable().getField("NOM"));
List<Object[]> listE = (List<Object[]>) Configuration.getInstance().getBase().getDataSource().execute(selE.asString(), new ArrayListHandler());
ArrayList<Map<String, Object>> listValuesE = new ArrayList<Map<String, Object>>(listeIds.size());
double totalE = 0;
long totalEInCents = 0;
 
for (Object[] o : listE) {
Map<String, Object> mValues = new HashMap<String, Object>();
266,11 → 303,11
 
mValues.put("NOM", o[0]);
 
final Double pA = new Double(((Number) o[2]).longValue() / 100.0);
final long pA = ((Number) o[2]).longValue();
mValues.put("QTE", o[1]);
mValues.put("TOTAL", pA);
mValues.put("TOTAL", pA / 100.0D);
 
totalE += pA;
totalEInCents += pA;
listValuesE.add(mValues);
}
 
278,20 → 315,19
if (values == null) {
values = new HashMap<String, Object>();
}
valuesHA.put("TOTAL", totalHA);
valuesE.put("TOTAL_HA", totalHA);
valuesE.put("TOTAL", totalE);
valuesE.put("TOTAL_VT", totalTPVTTC);
values.put("TOTAL", totalVC);
values.put("TOTAL_MARGE", totalTPVTTC - totalTPA);
valuesAchat.put("TOTAL", totalAchatInCents / 100f);
valuesE.put("TOTAL_HA", totalAchatInCents / 100f);
valuesE.put("TOTAL", totalEInCents / 100f);
valuesE.put("TOTAL_VT", totalTPVTTCInCents / 100f);
values.put("TOTAL", totalVCInCents / 100f);
values.put("TOTAL_MARGE", (totalTPVTTCInCents - totalTPAInCents) / 100f);
valuesE.put("TOTAL_GLOBAL", (totalTPVTTCInCents + totalAchatInCents) / 100f);
values.put("TOTAL_PA", totalTPAInCents / 100f);
values.put("TOTAL_PV_TTC", totalTPVTTCInCents / 100f);
 
valuesE.put("TOTAL_GLOBAL", totalTPVTTC + totalHA);
values.put("TOTAL_PA", totalTPA);
values.put("TOTAL_PV_TTC", totalTPVTTC);
 
String periode = "Période Du " + dateFormat.format(this.du) + " au " + dateFormat.format(this.au);
String periode = "Période Du " + DATE_FORMAT.format(this.du) + " au " + DATE_FORMAT.format(this.au);
values.put("DATE", periode);
valuesHA.put("DATE", periode);
valuesAchat.put("DATE", periode);
valuesE.put("DATE", periode);
System.err.println(this.du);
System.err.println(this.au);
298,8 → 334,8
this.listAllSheetValues.put(0, listValues);
this.mapAllSheetValues.put(0, values);
 
this.listAllSheetValues.put(1, listValuesHA);
this.mapAllSheetValues.put(1, valuesHA);
this.listAllSheetValues.put(1, listValuesAchat);
this.mapAllSheetValues.put(1, valuesAchat);
 
this.listAllSheetValues.put(2, listValuesE);
this.mapAllSheetValues.put(2, valuesE);
306,4 → 342,18
 
}
 
class ArticleVendu {
public String code, nom;
public int qte;
public long ht, ha, ttc;
 
public ArticleVendu(String code, String nom, int qte, long ht, long ha, long ttc) {
this.code = code;
this.nom = nom;
this.qte = qte;
this.ht = ht;
this.ha = ha;
this.ttc = ttc;
}
}
}