OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

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

/*
 * 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.generationEcritures;

import org.openconcerto.erp.core.finance.accounting.element.ComptePCESQLElement;
import org.openconcerto.erp.core.finance.accounting.element.JournalSQLElement;
import org.openconcerto.erp.model.PrixHT;
import org.openconcerto.erp.model.PrixTTC;
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.utils.ExceptionHandler;

import java.util.Date;

public class GenerationMvtSaisieVenteComptoir extends GenerationEcritures implements Runnable {

    private static final String source = "SAISIE_VENTE_COMPTOIR";
    private static final Integer journal = new Integer(JournalSQLElement.VENTES);
    private static final SQLTable saisieVCTable = base.getTable("SAISIE_VENTE_COMPTOIR");
    private static final SQLTable mvtTable = base.getTable("MOUVEMENT");
    private int idSaisieVenteComptoir;
    private static final SQLTable tablePrefCompte = base.getTable("PREFS_COMPTE");
    private static final SQLRow rowPrefsCompte = tablePrefCompte.getRow(2);

    public GenerationMvtSaisieVenteComptoir(int idSaisieVenteComptoir) {
        this(idSaisieVenteComptoir, 1);
    }

    public GenerationMvtSaisieVenteComptoir(int idSaisieVenteComptoir, int idMvt) {
        this.idSaisieVenteComptoir = idSaisieVenteComptoir;
        this.idMvt = idMvt;
        (new Thread(GenerationMvtSaisieVenteComptoir.this)).start();
    }

    private void genereMouvement() throws Exception {

        SQLRow saisieRow = GenerationMvtSaisieVenteComptoir.saisieVCTable.getRow(this.idSaisieVenteComptoir);
        SQLRow clientRow = base.getTable("CLIENT").getRow(saisieRow.getInt("ID_CLIENT"));
        SQLRow taxeRow = base.getTable("TAXE").getRow(saisieRow.getInt("ID_TAXE"));

        // Calcul des montants
        PrixTTC prixTTC = new PrixTTC(((Long) saisieRow.getObject("MONTANT_TTC")).longValue());
        PrixHT prixHT = new PrixHT(prixTTC.calculLongHT(taxeRow.getFloat("TAUX") / 100));
        long service = ((Long) saisieRow.getObject("MONTANT_SERVICE")).longValue();

        // iniatilisation des valeurs de la map
        this.date = (Date) saisieRow.getObject("DATE");
        String string = "Vente comptoir ";
        final String rowLib = saisieRow.getObject("NOM").toString();
        if (rowLib != null && rowLib.trim().length() > 0) {
            string += rowLib.trim();
        } else {
            string += saisieRow.getForeignRow("ID_ARTICLE").getString("NOM");
        }
        this.nom = string;
        this.putValue("DATE", this.date);
        this.putValue("NOM", this.nom);
        this.putValue("ID_JOURNAL", GenerationMvtSaisieVenteComptoir.journal);
        this.putValue("ID_MOUVEMENT", new Integer(1));

        // on calcule le nouveau numero de mouvement
        if (this.idMvt == 1) {
            this.idMvt = getNewMouvement(GenerationMvtSaisieVenteComptoir.source, this.idSaisieVenteComptoir, 1, string);
        }
        this.putValue("ID_MOUVEMENT", new Integer(this.idMvt));

        // Détermination du compte de produits
        int idCompteVenteProduit = rowPrefsCompte.getInt("ID_COMPTE_PCE_VENTE_PRODUIT");
        if (idCompteVenteProduit <= 1) {
            idCompteVenteProduit = ComptePCESQLElement.getIdComptePceDefault("VentesProduits");
        }
        if (clientRow.getObject("ID_COMPTE_PCE_PRODUIT") != null && !clientRow.isForeignEmpty("ID_COMPTE_PCE_PRODUIT")) {
            idCompteVenteProduit = clientRow.getInt("ID_COMPTE_PCE_PRODUIT");
        }
        if (saisieRow.getObject("ID_COMPTE_PCE_PRODUIT") != null && !saisieRow.isForeignEmpty("ID_COMPTE_PCE_PRODUIT")) {
            idCompteVenteProduit = saisieRow.getInt("ID_COMPTE_PCE_PRODUIT");
        }

        // compte Vente
        if (service != 0) {

            int idCompteVenteService = rowPrefsCompte.getInt("ID_COMPTE_PCE_VENTE_SERVICE");
            if (idCompteVenteService <= 1) {
                idCompteVenteService = ComptePCESQLElement.getIdComptePceDefault("VentesServices");
            }
            if (clientRow.getObject("ID_COMPTE_PCE_SERVICE") != null && !clientRow.isForeignEmpty("ID_COMPTE_PCE_SERVICE")) {
                idCompteVenteService = clientRow.getInt("ID_COMPTE_PCE_SERVICE");
            }
            if (saisieRow.getObject("ID_COMPTE_PCE_SERVICE") != null && !saisieRow.isForeignEmpty("ID_COMPTE_PCE_SERVICE")) {
                idCompteVenteService = saisieRow.getInt("ID_COMPTE_PCE_SERVICE");
            }

            this.putValue("ID_COMPTE_PCE", new Integer(idCompteVenteService));
            this.putValue("DEBIT", new Long(0));
            this.putValue("CREDIT", new Long(service));
            ajoutEcriture();

            if ((prixHT.getLongValue() - service) > 0) {

                this.putValue("ID_COMPTE_PCE", new Integer(idCompteVenteProduit));
                this.putValue("DEBIT", new Long(0));
                this.putValue("CREDIT", new Long(prixHT.getLongValue() - service));
                ajoutEcriture();
            }

        } else {

            this.putValue("ID_COMPTE_PCE", new Integer(idCompteVenteProduit));
            this.putValue("DEBIT", new Long(0));
            this.putValue("CREDIT", new Long(prixHT.getLongValue()));
            ajoutEcriture();
        }

        // compte TVA
        long tva = prixTTC.calculLongTVA(taxeRow.getFloat("TAUX") / 100.0);
        if (tva > 0) {
            int idCompteTVA;

            SQLRowAccessor rowCptTva = saisieRow.getForeign("ID_TAXE").getForeign("ID_COMPTE_PCE_COLLECTE");
            if (rowCptTva == null || rowCptTva.isUndefined()) {
                idCompteTVA = rowPrefsCompte.getInt("ID_COMPTE_PCE_TVA_VENTE");
                if (idCompteTVA <= 1) {
                    idCompteTVA = ComptePCESQLElement.getIdComptePceDefault("TVACollectee");
                }
            } else {
                idCompteTVA = rowCptTva.getID();
            }

            this.putValue("ID_COMPTE_PCE", new Integer(idCompteTVA));
            this.putValue("DEBIT", new Long(0));
            this.putValue("CREDIT", new Long(tva));
            ajoutEcriture();
        }

        // compte Clients
        int idCompteClient = clientRow.getInt("ID_COMPTE_PCE");
        if (idCompteClient <= 1) {
            idCompteClient = rowPrefsCompte.getInt("ID_COMPTE_PCE_CLIENT");
            if (idCompteClient <= 1) {
                idCompteClient = ComptePCESQLElement.getIdComptePceDefault("Clients");
            }
        }
        this.putValue("ID_COMPTE_PCE", new Integer(idCompteClient));
        this.putValue("DEBIT", new Long(prixTTC.getLongValue()));
        this.putValue("CREDIT", new Long(0));
        ajoutEcriture();

        // Règlement
        String s = "Vente comptoir ";
        final String name = saisieRow.getObject("NOM").toString();
        if (name != null && rowLib.trim().length() > 0) {
            s += name.trim();
        } else {
            s += saisieRow.getForeignRow("ID_ARTICLE").getString("NOM");
        }
        SQLRow modeRegRow = saisieRow.getForeignRow("ID_MODE_REGLEMENT");

        new GenerationReglementVenteNG(s, clientRow, prixTTC, this.date, modeRegRow, saisieRow, mvtTable.getRow(this.idMvt));

        // On place le nuemro de mouvement associe à la saisie
        SQLRowValues valSaisieVC = new SQLRowValues(GenerationMvtSaisieVenteComptoir.saisieVCTable);
        valSaisieVC.put("ID_MOUVEMENT", new Integer(this.idMvt));

        if (valSaisieVC.getInvalid() == null) {
            // ajout de l'ecriture
            valSaisieVC.update(this.idSaisieVenteComptoir);
            displayMvtNumber();
        }

    }

    public void run() {
        try {
            genereMouvement();
        } catch (Exception e) {
            ExceptionHandler.handle("Erreur pendant la générations des écritures comptables", e);
        }
    }
}