OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 73 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
18 ilm 1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
10
 *
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
13
 
14
 package org.openconcerto.erp.generationEcritures;
15
 
83 ilm 16
import org.openconcerto.erp.core.common.element.BanqueSQLElement;
18 ilm 17
import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement;
18
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement;
19
import org.openconcerto.erp.core.finance.payment.element.ChequeAEncaisserSQLElement;
20
import org.openconcerto.erp.core.finance.payment.element.ModeDeReglementSQLElement;
83 ilm 21
import org.openconcerto.erp.core.finance.payment.element.TypeReglementSQLElement;
18 ilm 22
import org.openconcerto.erp.model.PrixTTC;
23
import org.openconcerto.sql.Configuration;
24
import org.openconcerto.sql.model.SQLRow;
25
import org.openconcerto.sql.model.SQLRowValues;
26
import org.openconcerto.sql.model.SQLTable;
27
import org.openconcerto.utils.ExceptionHandler;
28
 
29
import java.sql.SQLException;
30
import java.util.Date;
31
 
32
public class GenerationMvtReglementVenteComptoir extends GenerationEcritures implements Runnable {
33
    private int idSaisieVenteComptoir;
34
 
35
    // Journal Caisse
36
    private static final Integer journalCaisse = new Integer(JournalSQLElement.CAISSES);
37
    private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE");
38
    private static final SQLRow rowPrefsCompte = tablePrefCompte.getRow(2);
39
    private static final SQLTable tableMouvement = base.getTable("MOUVEMENT");
40
    private int idPere = 1;
41
 
73 ilm 42
    public GenerationMvtReglementVenteComptoir(int idSaisieVenteComptoir, int idMvt) {
43
        this.idPere = idMvt;
44
        this.idSaisieVenteComptoir = idSaisieVenteComptoir;
45
        new Thread(GenerationMvtReglementVenteComptoir.this).start();
46
    }
47
 
18 ilm 48
    public void run() {
73 ilm 49
        try {
50
            System.out.println("génération des ecritures de règlement vente comptoir");
18 ilm 51
 
73 ilm 52
            SQLRow saisieRow = base.getTable("SAISIE_VENTE_COMPTOIR").getRow(this.idSaisieVenteComptoir);
53
            SQLRow clientRow = base.getTable("CLIENT").getRow(saisieRow.getInt("ID_CLIENT"));
54
            SQLRow modeRegRow = base.getTable("MODE_REGLEMENT").getRow(saisieRow.getInt("ID_MODE_REGLEMENT"));
55
            SQLRow typeRegRow = base.getTable("TYPE_REGLEMENT").getRow(modeRegRow.getInt("ID_TYPE_REGLEMENT"));
18 ilm 56
 
73 ilm 57
            PrixTTC prixTTC = new PrixTTC(((Long) saisieRow.getObject("MONTANT_TTC")).longValue());
58
            this.date = (Date) saisieRow.getObject("DATE");
59
            String string = "Vente comptoir ";
60
            final String rowLib = saisieRow.getObject("NOM").toString();
61
            if (rowLib != null && rowLib.trim().length() > 0) {
62
                string += rowLib.trim();
63
            } else {
64
                string += saisieRow.getForeignRow("ID_ARTICLE").getString("NOM");
65
            }
66
            this.nom = string + " (" + typeRegRow.getString("NOM") + ")";
18 ilm 67
 
73 ilm 68
            // si paiement comptant
69
            if ((modeRegRow.getInt("AJOURS") == 0) && (modeRegRow.getInt("LENJOUR") == 0)) {
18 ilm 70
 
73 ilm 71
                // test Cheque
72
                if (typeRegRow.getID() == 2) {
18 ilm 73
 
73 ilm 74
                    // Ajout dans cheque à encaisser sans date minimum d'encaissement
75
                    paiementCheque(this.date);
76
                } else {
18 ilm 77
 
73 ilm 78
                    // si on paye comptant alors l'ensemble ne forme qu'un seul mouvement
79
                    this.idMvt = idPere;
18 ilm 80
 
73 ilm 81
                    // iniatilisation des valeurs de la map pour les ecritures
82
                    this.mEcritures.put("DATE", new java.sql.Date(this.date.getTime()));
83
                    this.mEcritures.put("NOM", this.nom);
84
                    this.mEcritures.put("ID_MOUVEMENT", new Integer(this.idMvt));
18 ilm 85
 
73 ilm 86
                    if (typeRegRow.getID() == 4) {
87
                        this.mEcritures.put("ID_JOURNAL", GenerationMvtReglementVenteComptoir.journalCaisse);
88
                    } else {
83 ilm 89
                        fillJournalBanqueFromRow(modeRegRow);
73 ilm 90
                    }
18 ilm 91
 
73 ilm 92
                    // compte Clients
93
                    int idCompteClient = clientRow.getInt("ID_COMPTE_PCE");
18 ilm 94
                    if (idCompteClient <= 1) {
73 ilm 95
                        idCompteClient = rowPrefsCompte.getInt("ID_COMPTE_PCE_CLIENT");
96
                        if (idCompteClient <= 1) {
18 ilm 97
                            idCompteClient = ComptePCESQLElement.getIdComptePceDefault("Clients");
98
                        }
99
                    }
73 ilm 100
 
18 ilm 101
                    this.mEcritures.put("ID_COMPTE_PCE", new Integer(idCompteClient));
102
                    this.mEcritures.put("DEBIT", new Long(0));
103
                    this.mEcritures.put("CREDIT", new Long(prixTTC.getLongValue()));
104
                    ajoutEcriture();
105
 
106
                    // compte de reglement
83 ilm 107
                    if (typeRegRow.getID() == TypeReglementSQLElement.ESPECE) {
108
                        int idCompteRegl = typeRegRow.getInt("ID_COMPTE_PCE_CLIENT");
109
                        if (idCompteRegl <= 1) {
110
                            idCompteRegl = ComptePCESQLElement.getIdComptePceDefault("VenteEspece");
111
                        }
112
 
113
                        this.mEcritures.put("ID_COMPTE_PCE", Integer.valueOf(idCompteRegl));
114
                    } else {
115
                        fillCompteBanqueFromRow(modeRegRow, "VenteCB", false);
18 ilm 116
                    }
117
                    this.mEcritures.put("DEBIT", new Long(prixTTC.getLongValue()));
118
                    this.mEcritures.put("CREDIT", new Long(0));
119
                    ajoutEcriture();
73 ilm 120
 
18 ilm 121
                }
73 ilm 122
            } else {
18 ilm 123
 
73 ilm 124
                Date dateEch = ModeDeReglementSQLElement.calculDate(modeRegRow.getInt("AJOURS"), modeRegRow.getInt("LENJOUR"), this.date);
18 ilm 125
 
73 ilm 126
                // Cheque
127
                if (typeRegRow.getID() == 2) {
18 ilm 128
 
73 ilm 129
                    // Ajout dans cheque à encaisser avec date minimum d'encaissement
130
                    paiementCheque(dateEch);
131
                } else {
18 ilm 132
 
73 ilm 133
                    System.err.println("Echéance client");
18 ilm 134
 
73 ilm 135
                    SQLTable tableEchCli = base.getTable("ECHEANCE_CLIENT");
136
                    SQLRowValues valEcheance = new SQLRowValues(tableEchCli);
18 ilm 137
 
73 ilm 138
                    // Ajout dans echeance
18 ilm 139
 
73 ilm 140
                    SQLRow rowMvtPere = tableMouvement.getRow(idPere);
141
                    this.idMvt = getNewMouvement("ECHEANCE_CLIENT", 1, idPere, rowMvtPere.getInt("ID_PIECE"));
18 ilm 142
 
73 ilm 143
                    valEcheance.put("ID_MOUVEMENT", new Integer(this.idMvt));
144
                    valEcheance.put("DATE", new java.sql.Date(dateEch.getTime()));
145
                    valEcheance.put("MONTANT", new Long(prixTTC.getLongValue()));
146
                    valEcheance.put("ID_CLIENT", new Integer(saisieRow.getInt("ID_CLIENT")));
18 ilm 147
 
148
                    if (valEcheance.getInvalid() == null) {
149
 
150
                        // ajout de l'ecriture
151
                        SQLRow row = valEcheance.insert();
152
                        SQLRowValues rowVals = new SQLRowValues(tableMouvement);
153
                        rowVals.put("IDSOURCE", row.getID());
154
                        rowVals.update(this.idMvt);
155
                    }
73 ilm 156
 
18 ilm 157
                }
158
            }
73 ilm 159
        } catch (Exception e) {
160
            ExceptionHandler.handle("", e);
18 ilm 161
        }
162
    }
163
 
164
    /**
165
     * Reglement par cheque
166
     *
167
     * @param dateEch date d'echeance d'encaissement du cheque
73 ilm 168
     * @throws SQLException
18 ilm 169
     */
73 ilm 170
    private void paiementCheque(Date dateEch) throws SQLException {
18 ilm 171
        SQLRow saisieRow = base.getTable("SAISIE_VENTE_COMPTOIR").getRow(this.idSaisieVenteComptoir);
172
        PrixTTC prixTTC = new PrixTTC(((Long) saisieRow.getObject("MONTANT_TTC")).longValue());
173
 
174
        ChequeAEncaisserSQLElement chqAEncaisserElt = (ChequeAEncaisserSQLElement) Configuration.getInstance().getDirectory().getElement("CHEQUE_A_ENCAISSER");
175
        SQLRowValues valEncaisse = new SQLRowValues(chqAEncaisserElt.getTable());
176
 
177
        valEncaisse.put("ID_CLIENT", new Integer(saisieRow.getInt("ID_CLIENT")));
178
        valEncaisse.put("DATE_VENTE", new java.sql.Date(this.date.getTime()));
179
        valEncaisse.put("DATE_MIN_DEPOT", new java.sql.Date(dateEch.getTime()));
180
        valEncaisse.put("DATE_DEPOT", new java.sql.Date(this.date.getTime()));
181
        valEncaisse.put("MONTANT", new Long(prixTTC.getLongValue()));
83 ilm 182
 
183
        if (!saisieRow.isForeignEmpty("ID_MODE_REGLEMENT")) {
184
            SQLRow rowModeRegl = saisieRow.getForeignRow("ID_MODE_REGLEMENT");
185
            valEncaisse.put("ID_" + BanqueSQLElement.TABLENAME, rowModeRegl.getInt("ID_" + BanqueSQLElement.TABLENAME));
186
        }
18 ilm 187
        // on crée un nouveau mouvement pour l'encaissement futur du cheque
188
        SQLRow rowMvtPere = tableMouvement.getRow(idPere);
189
        this.idMvt = getNewMouvement("CHEQUE_A_ENCAISSER", 1, idPere, rowMvtPere.getInt("ID_PIECE"));
190
 
191
        valEncaisse.put("ID_MOUVEMENT", new Integer(this.idMvt));
192
 
73 ilm 193
        if (valEncaisse.getInvalid() == null) {
194
            // ajout de l'ecriture
195
            SQLRow row = valEncaisse.insert();
196
            SQLRowValues rowVals = new SQLRowValues(tableMouvement);
197
            rowVals.put("IDSOURCE", row.getID());
198
            rowVals.update(this.idMvt);
199
        }
18 ilm 200
 
201
    }
202
 
203
}