/*
 * DlgEditRefCompta.java
 *
 * Created on 9 janvier 2008, 11:56
 */

package fr.gouv.finances.cp.xemelios.plugin.generatorPesPjs;

import fr.gouv.finances.cp.utils.Pair;
/**
 *
 * @author  jp.tessier
 */
public class DlgEditRefCompta extends javax.swing.JDialog {
    private RefCompta referenceComptable;
    private boolean bRet,isEdit=false;
    
    /** Creates new form DlgEditRefCompta */
    public DlgEditRefCompta(javax.swing.JFrame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        initComportement();
        setLocationRelativeTo(parent);
    }
    
    public boolean run() {
        setVisible(true);
        return bRet;
    }
    
    public boolean runEdit(RefCompta rc) {
        
        referenceComptable = rc;
        isEdit=true;
        initDlg();
        setVisible(true);
        return bRet;
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        domaines = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        exercice = new javax.swing.JTextField();
        label_type_piece = new javax.swing.JLabel();
        type_piece = new javax.swing.JComboBox();
        label_num_piece = new javax.swing.JLabel();
        num_piece = new javax.swing.JTextField();
        label_num_ligne_piece = new javax.swing.JLabel();
        num_ligne_piece = new javax.swing.JTextField();
        label_code_produit = new javax.swing.JLabel();
        code_produit = new javax.swing.JTextField();
        label_id_tiers = new javax.swing.JLabel();
        id_tiers = new javax.swing.JTextField();
        jSeparator1 = new javax.swing.JSeparator();
        cancel_button = new javax.swing.JButton();
        save_button = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabel1.setText("Domaine");

        domaines.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Dépense", "Recette", "Budget", "Marché" }));
        domaines.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                domainesItemStateChanged(evt);
            }
        });

        jLabel2.setText("Exercice");

        label_type_piece.setText("Type de pièce");

        label_num_piece.setText("Numéro de Mandat");

        label_num_ligne_piece.setText("Numéro de Ligne de Mandat");

        label_code_produit.setText("Code Produit");

        label_id_tiers.setText("Identifiant Tiers");

        cancel_button.setText("Annuler");
        cancel_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancel_buttonActionPerformed(evt);
            }
        });

        save_button.setText("Enregistrer");
        save_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                save_buttonActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 400, Short.MAX_VALUE)
            .add(layout.createSequentialGroup()
                .add(10, 10, 10)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(label_code_produit)
                    .add(label_num_ligne_piece)
                    .add(label_num_piece)
                    .add(label_type_piece)
                    .add(jLabel1)
                    .add(jLabel2)
                    .add(label_id_tiers))
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(type_piece, 0, 228, Short.MAX_VALUE)
                    .add(exercice, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                    .add(num_piece, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                    .add(num_ligne_piece, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                    .add(code_produit, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                    .add(id_tiers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE)
                    .add(domaines, 0, 228, Short.MAX_VALUE))
                .addContainerGap())
            .add(jSeparator1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(218, Short.MAX_VALUE)
                .add(cancel_button)
                .add(18, 18, 18)
                .add(save_button)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 322, Short.MAX_VALUE)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel1)
                    .add(domaines, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(15, 15, 15)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(exercice, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(jLabel2))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(label_type_piece)
                            .add(type_piece, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(12, 12, 12)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(label_num_piece)
                            .add(num_piece, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(18, 18, 18)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(label_num_ligne_piece)
                            .add(num_ligne_piece, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(18, 18, 18)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(label_code_produit)
                            .add(code_produit, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(layout.createSequentialGroup()
                                .add(17, 17, 17)
                                .add(id_tiers, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(layout.createSequentialGroup()
                                .add(18, 18, 18)
                                .add(label_id_tiers))))
                    .add(layout.createSequentialGroup()
                        .add(224, 224, 224)
                        .add(jSeparator1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 10, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(save_button)
                    .add(cancel_button))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void save_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_save_buttonActionPerformed
        if(isValidForm()){
            String[] tabpce = type_piece.getSelectedItem().toString().split(" - ");
            Pair typce = new Pair(tabpce[0],tabpce[1]);
            if(!isEdit){
                referenceComptable = new RefCompta(domaines.getSelectedItem().toString(),Integer.parseInt(exercice.getText()),typce,num_piece.getText().length()>0?Integer.parseInt(num_piece.getText()):0,num_ligne_piece.getText().length()>0?Integer.parseInt(num_ligne_piece.getText()):0,code_produit.getText(),id_tiers.getText());
            }else{
                referenceComptable.modifRefCompta(domaines.getSelectedItem().toString(),Integer.parseInt(exercice.getText()),typce,num_piece.getText().length()>0?Integer.parseInt(num_piece.getText()):0,num_ligne_piece.getText().length()>0?Integer.parseInt(num_ligne_piece.getText()):0,code_produit.getText(),id_tiers.getText());
            }
            bRet = true;
            setVisible(false);
        }
}//GEN-LAST:event_save_buttonActionPerformed

    private void domainesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_domainesItemStateChanged
        initComportement();
}//GEN-LAST:event_domainesItemStateChanged

    private void cancel_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancel_buttonActionPerformed
        setVisible(false);
}//GEN-LAST:event_cancel_buttonActionPerformed
    
    private void initComportement(){
        String domaine = this.domaines.getSelectedItem().toString();
        type_piece.removeAllItems();
        if (domaine.equals("Dépense")) {
            // Remplissage de la combo box
            type_piece.addItem("01 - Mandat ordinaire");
            type_piece.addItem("02 - Mandat correctif");
            type_piece.addItem("03 - Mandat d'ordre budgétaire");
            type_piece.addItem("04 - Mandat d'ordre mixte");
            type_piece.addItem("05 - Mandat émis après paiement");
            type_piece.addItem("06 - Mandat global");
            type_piece.addItem("07 - Mandat d'admission en non valeurs");
            type_piece.addItem("08 - Mandat collectif");
            type_piece.addItem("09 - Mandat sur marché");
            type_piece.addItem("10 - Mandat de rattachement");
            type_piece.addItem("11 - Ordre de paiement");
            type_piece.addItem("12 - Demande émission mandat");
            type_piece.addItem("13 - Charges constatées d'avance");
            
            // Modification des labels
            changeLabelPiece("Numéro de Mandat");
            changeLabelLignePiece("Numéro de ligne de Mandat");
            
            // Désactivation ou activation de labels ou de champs
            enabledLignePiece();
            disabledCodeProduit();
            disabledIdTiers();
        } else if (domaine.equals("Recette")) {
            // Remplissage de la combo box
            type_piece.addItem("01 - Titre ordinaire");
            type_piece.addItem("02 - Titre correctif");
            type_piece.addItem("03 - Titre d'ordre budgétaire");
            type_piece.addItem("04 - Titre d'ordre mixte");
            type_piece.addItem("05 - Titre émis après encaissement");
            type_piece.addItem("06 - Titre récapitulatif avec rôle");
            type_piece.addItem("07 - Titre récapitulatif sans rôle");
            type_piece.addItem("08 - Rôle titre");
            type_piece.addItem("09 - Titre de majoration");
            type_piece.addItem("10 - Titre en plusieurs années");
            type_piece.addItem("11 - Titre de rattachement");
            type_piece.addItem("12 - Ordre de recette ordonnateur");
            type_piece.addItem("13 - Demande émission de titre (P503)");
            type_piece.addItem("14 - Produits constatés d'avance");
            
            // Modification des labels
            changeLabelPiece("Numéro de Titre ou de Rôle");
            changeLabelLignePiece("Numéro de ligne de Titre ou de Rôle");
            
            // Désactivation ou activation de labels ou de champs
            enabledLignePiece();
            enabledCodeProduit();
            disabledIdTiers();
        } else if (domaine.equals("Budget")) {
            // Remplissage de la combo box
            type_piece.addItem("01 - Budget primitif, (autorisation budgétaire)");
            type_piece.addItem("02 - Décision modificative");
            type_piece.addItem("03 - Budget supplémentaire");
            type_piece.addItem("04 - Virement de crédit");
            type_piece.addItem("05 - Restes à réaliser (reports de crédit )");
            type_piece.addItem("06 - Délibération spéciale");
            type_piece.addItem("07 - Budget de référence");
            type_piece.addItem("08 - Budget de saisine");
            type_piece.addItem("09 - Compte administratif");
            
            // Désactivation ou activation de labels ou de champs
            disabledLignePiece();
            disabledCodeProduit();
            disabledIdTiers();
        } else if (domaine.equals("Marché")) {
            // Remplissage de la combo box
            type_piece.addItem("01 - Contrat initial");
            type_piece.addItem("02 - Avenant sans impact financier");
            type_piece.addItem("03 - Avenant positif");
            type_piece.addItem("04 - Avenant négatif");
            type_piece.addItem("05 - Avenant mixte positif");
            type_piece.addItem("06 - Avenant mixte négatif");
            type_piece.addItem("07 - Avenant de transfert");
            type_piece.addItem("08 - Acte spécial");
            type_piece.addItem("09 - Décision de poursuivre");
            
            // Désactivation ou activation de labels ou de champs
            disabledLignePiece();
            enabledCodeProduit();
            enabledIdTiers();           
        }
    }
    
    private void changeLabelPiece(String text){
        label_num_piece.setText(text);
    }
    
    private void changeLabelLignePiece(String text){
        label_num_ligne_piece.setText(text);
    }
    
    private void enabledLignePiece(){
        num_ligne_piece.setEditable(true);
        label_num_ligne_piece.setEnabled(true);
    }
    
    private void disabledLignePiece(){
        num_ligne_piece.setEditable(false);
        num_ligne_piece.setText("");
        label_num_ligne_piece.setEnabled(false);
    }  
    
    private void enabledCodeProduit(){
        code_produit.setEnabled(true);
        label_code_produit.setEnabled(true);
    }
    
    private void disabledCodeProduit(){
        code_produit.setEnabled(false);
        code_produit.setText("");
        label_code_produit.setEnabled(false);
    }
    
    private void enabledIdTiers(){
        id_tiers.setEnabled(true);
        label_id_tiers.setEnabled(true);
    }
    
    private void disabledIdTiers(){
        id_tiers.setEnabled(false);
        id_tiers.setText("");
        label_id_tiers.setEnabled(false);
    }
    
    private boolean isValidForm(){
        if(exercice.getText().matches("[0-9][0-9][0-9][0-9]")){
            System.out.println("Le formulaire est valide");
            return true;
        }else{
            return false;
        }
    }
    
    private void initDlg(){
        for(int i=0;i<domaines.getItemCount();i++){
            if(domaines.getItemAt(i).equals(referenceComptable.getDomaine())){
                domaines.setSelectedIndex(i);
            }
        }
        exercice.setText(referenceComptable.getExercice().toString());
        for(int i=0;i<type_piece.getItemCount();i++){
            if(type_piece.getItemAt(i).toString().contains(referenceComptable.getTypePiece().key)){
                type_piece.setSelectedIndex(i);
            }
        }
        num_piece.setText(referenceComptable.getNumPiece().toString());
        num_ligne_piece.setText(referenceComptable.getNumLignePiece().toString());
        code_produit.setText(referenceComptable.getCodeProduit());
        id_tiers.setText(referenceComptable.getIdTiers());
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                DlgEditRefCompta dialog = new DlgEditRefCompta(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton cancel_button;
    private javax.swing.JTextField code_produit;
    private javax.swing.JComboBox domaines;
    private javax.swing.JTextField exercice;
    private javax.swing.JTextField id_tiers;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JLabel label_code_produit;
    private javax.swing.JLabel label_id_tiers;
    private javax.swing.JLabel label_num_ligne_piece;
    private javax.swing.JLabel label_num_piece;
    private javax.swing.JLabel label_type_piece;
    private javax.swing.JTextField num_ligne_piece;
    private javax.swing.JTextField num_piece;
    private javax.swing.JButton save_button;
    private javax.swing.JComboBox type_piece;
    // End of variables declaration//GEN-END:variables

    public RefCompta getReferenceComptable() {
        return this.referenceComptable;
    }
   
    
}
