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