OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Blame | 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.core.finance.accounting.element;

import org.openconcerto.erp.core.common.ui.DeviseField;
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
import org.openconcerto.sql.element.BaseSQLComponent;
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
import org.openconcerto.sql.element.SQLComponent;
import org.openconcerto.sql.sqlobject.SQLRequestComboBox;
import org.openconcerto.ui.DefaultGridBagConstraints;
import org.openconcerto.utils.GestionDevise;
import org.openconcerto.utils.ListMap;
import org.openconcerto.utils.text.SimpleDocumentListener;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;

import com.ibm.icu.math.BigDecimal;

public class FraisDocumentSQLElement extends ComptaSQLConfElement {

    public FraisDocumentSQLElement() {
        super("FRAIS_DOCUMENT");
    }

    protected List<String> getListFields() {
        final List<String> list = new ArrayList<String>(2);
        list.add("CODE");
        list.add("NOM");
        list.add("MONTANT_HT");
        list.add("ID_TAXE");
        list.add("MONTANT_TTC");
        return list;
    }

    protected List<String> getComboFields() {
        final List<String> list = new ArrayList<String>(2);
        list.add("CODE");
        list.add("NOM");
        list.add("MONTANT_TTC");
        return list;
    }

    @Override
    public Set<String> getReadOnlyFields() {
        Set<String> s = new HashSet<>();
        s.add("MONTANT_TTC");
        return s;
    }

    @Override
    public ListMap<String, String> getShowAs() {
        return ListMap.singleton(null, "CODE", "NOM");

    }

    public SQLComponent createComponent() {
        return new BaseSQLComponent(this) {

            public void addViews() {
                this.setLayout(new GridBagLayout());
                final GridBagConstraints c = new DefaultGridBagConstraints();

                // Code
                final JLabel labelCode = new JLabel(getLabelFor("CODE"));
                c.weightx = 0;
                this.add(labelCode, c);
                c.gridx++;
                c.weightx = 1;
                final JTextField textCode = new JTextField();
                this.add(textCode, c);

                // Nom
                c.gridx++;
                c.weightx = 0;
                final JLabel labelNom = new JLabel(getLabelFor("NOM"));
                this.add(labelNom, c);
                c.gridx++;
                c.weightx = 1;
                final JTextField textNom = new JTextField();
                this.add(textNom, c);

                // Montant
                c.gridy++;
                c.gridx = 0;
                c.weightx = 0;

                final JLabel labelTaux = new JLabel(getLabelFor("MONTANT_HT"));
                this.add(labelTaux, c);
                c.gridx++;
                c.weightx = 1;
                final DeviseField textTaux = new DeviseField();
                this.add(textTaux, c);

                c.gridx++;
                c.weightx = 0;

                final JLabel labelTaxe = new JLabel(getLabelFor("ID_TAXE"));
                this.add(labelTaxe, c);
                c.gridx++;
                c.weightx = 1;
                final SQLRequestComboBox boxTaxe = new SQLRequestComboBox();
                this.add(boxTaxe, c);

                c.gridx++;
                c.weightx = 0;

                final JLabel labelTTC = new JLabel(getLabelFor("MONTANT_TTC"));
                this.add(labelTTC, c);
                c.gridx++;
                c.weightx = 1;
                final DeviseField textTTC = new DeviseField();
                textTTC.setEditable(false);
                this.add(textTTC, c);

                this.addRequiredSQLObject(boxTaxe, "ID_TAXE");
                boxTaxe.addModelListener("wantedID", new PropertyChangeListener() {

                    @Override
                    public void propertyChange(PropertyChangeEvent evt) {
                        textTTC.setValue(getMontantTTC(textTaux, boxTaxe));
                    }
                });

                textTaux.getDocument().addDocumentListener(new SimpleDocumentListener() {

                    @Override
                    public void update(DocumentEvent e) {

                        textTTC.setValue(getMontantTTC(textTaux, boxTaxe));
                    }
                });

                this.addRequiredSQLObject(textTTC, "MONTANT_TTC");
                this.addRequiredSQLObject(textTaux, "MONTANT_HT");
                this.addRequiredSQLObject(textNom, "NOM");
                this.addRequiredSQLObject(textCode, "CODE");
            }

            public long getMontantTTC(DeviseField fieldHT, SQLRequestComboBox boxTVA) {
                long l = 0;

                long p = GestionDevise.parseLongCurrency(fieldHT.getText().trim());
                if (!boxTVA.isEmpty()) {
                    Float t = TaxeCache.getCache().getTauxFromId(boxTVA.getWantedID());
                    if (t != null) {
                        l = new BigDecimal(p).multiply(new BigDecimal(t).movePointLeft(2).add(BigDecimal.ONE)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
                    }
                }

                return l;
            }

        };
    }
}