com.lp.client.finanz.TabbedPaneKonten.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.client.finanz.TabbedPaneKonten.java

Source

/*******************************************************************************
 * HELIUM V, Open Source ERP software for sustained success
 * at small and medium-sized enterprises.
 * Copyright (C) 2004 - 2015 HELIUM V IT-Solutions GmbH
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published 
 * by the Free Software Foundation, either version 3 of theLicense, or 
 * (at your option) any later version.
 * 
 * According to sec. 7 of the GNU Affero General Public License, version 3, 
 * the terms of the AGPL are supplemented with the following terms:
 * 
 * "HELIUM V" and "HELIUM 5" are registered trademarks of 
 * HELIUM V IT-Solutions GmbH. The licensing of the program under the 
 * AGPL does not imply a trademark license. Therefore any rights, title and
 * interest in our trademarks remain entirely with us. If you want to propagate
 * modified versions of the Program under the name "HELIUM V" or "HELIUM 5",
 * you may only do so if you have a written permission by HELIUM V IT-Solutions 
 * GmbH (to acquire a permission please contact HELIUM V IT-Solutions
 * at trademark@heliumv.com).
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contact: developers@heliumv.com
 ******************************************************************************/
package com.lp.client.finanz;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.event.ChangeEvent;

import com.lowagie.text.Font;
import com.lp.client.frame.ExceptionLP;
import com.lp.client.frame.HelperClient;
import com.lp.client.frame.component.ISourceEvent;
import com.lp.client.frame.component.InternalFrame;
import com.lp.client.frame.component.ItemChangedEvent;
import com.lp.client.frame.component.PanelBasis;
import com.lp.client.frame.component.PanelQuery;
import com.lp.client.frame.component.PanelSplit;
import com.lp.client.frame.component.TabbedPane;
import com.lp.client.frame.component.WrapperMenu;
import com.lp.client.frame.component.WrapperMenuBar;
import com.lp.client.frame.component.WrapperMenuItem;
import com.lp.client.frame.delegate.DelegateFactory;
import com.lp.client.frame.dialog.DialogFactory;
import com.lp.client.pc.LPMain;
import com.lp.client.util.fastlanereader.gui.QueryType;
import com.lp.server.benutzer.service.RechteFac;
import com.lp.server.finanz.service.BuchungDto;
import com.lp.server.finanz.service.BuchungdetailDto;
import com.lp.server.finanz.service.FibuFehlerDto;
import com.lp.server.finanz.service.FinanzServiceFac;
import com.lp.server.finanz.service.FinanzamtDto;
import com.lp.server.finanz.service.KontoDto;
import com.lp.server.finanz.service.UvaverprobungDto;
import com.lp.server.system.service.GeschaeftsjahrMandantDto;
import com.lp.server.system.service.MandantFac;
import com.lp.server.util.fastlanereader.service.query.FilterKriterium;
import com.lp.server.util.fastlanereader.service.query.FilterKriteriumDirekt;
import com.lp.server.util.fastlanereader.service.query.QueryParameters;
import com.lp.util.Helper;
import com.sun.glass.events.KeyEvent;

/**
 * <p>
 * Diese Klasse kuemmert sich um die Panels der Konten in der FiBu
 * </p>
 * 
 * <p>
 * Copyright Logistik Pur Software GmbH (c) 2004-2008
 * </p>
 * 
 * @author Martin Bluehweis
 * @version $Revision: 1.58 $
 */

public abstract class TabbedPaneKonten extends TabbedPane {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private PanelQuery panelQueryKonten = null;
    private PanelFinanzKontoKopfdaten panelDetailKontoKopfdaten = null;
    private PanelSplit panelSplit3 = null;
    private PanelQuery panelQueryBuchungen = null;
    private PanelFinanzBuchungDetails panelDetailBuchung = null;
    private PanelQuery panelKontolaenderartQP1 = null;
    private PanelFinanzKontolaenderart panelKontolaenderart = null;
    private PanelSplit panelSplitKontolaenderart = null;

    private PanelQuery panelKontoLandQP1 = null;
    private PanelFinanzKontoLand panelKontoLand = null;
    private PanelSplit panelSplitKontoLand = null;

    private PanelFinanzUmbuchung panelUmbuchung = null;
    private PanelFinanzSplittbuchung panelSplittbuchung = null;

    protected final static String MENU_ACTION_SALDENLISTE = "menu_action_saldenliste";
    protected final static String MENU_ACTION_ERFOLGSRECHNUNG = "menu_action_erfolgsrechnung";
    protected final static String MENU_ACTION_BILANZ = "menu_action_bilanz";
    protected final static String MENU_ACTION_UMBUCHUNG = "menu_action_umbuchung";
    protected final static String MENU_ACTION_SPLITTBUCHUNG = "menu_action_splittbuchung";
    protected final static String MENU_ACTION_MANUELLE_BUCHUNG = "menu_action_manuelle_buchung";
    protected final static String MENU_ACTION_KONTOBLAETTER = "menu_action_kontoblaetter";
    // protected final static String MENU_ACTION_DATEI_DRUCKEN_KONTOBLATT =
    // "MENU_ACTION_DATEI_DRUCKEN_KONTOBLATT";
    protected final static String MENU_ACTION_JOURNAL_KONTEN = "MENU_ACTION_JOURNAL_KONTEN";
    protected final static String MENU_ACTION_JOURNAL_KONTEN_DEBI = "MENU_ACTION_JOURNAL_KONTEN_DEBI";
    protected final static String MENU_ACTION_JOURNAL_KONTEN_KREDI = "MENU_ACTION_JOURNAL_KONTEN_KREDI";

    protected final static String MENU_ACTION_FINANZAMTSBUCHUNGEN = "MENU_ACTION_FINANZAMTSBUCHUNGEN";
    protected final static String MENU_ACTION_UVA = "MENU_ACTION_UVA";
    protected final static String MENU_ACTION_USTVERPROBUNG = "MENU_ACTION_STEUERNACHWEIS";
    protected final static String MENU_ACTION_UVA_ZURUECKNEHMEN = "MENU_ACTION_UVA_ZURUECKNEHMEN";
    protected final static String MENU_ACTION_BEARBEITEN_STORNIEREN = "MENU_ACTION_BEARBEITEN_STORNIEREN";
    protected final static String MENU_ACTION_BEARBEITEN_BELEGUEBERNAHME = "MENU_ACTION_BEARBEITEN_BELEGUEBERNAHME";
    protected final static String MENU_ACTION_BEARBEITEN_IMPORTKONTEN = "MENU_ACTION_BEARBEITEN_IMPORTKONTEN";
    protected final static String MENU_ACTION_BEARBEITEN_PERIODENUEBERNAHME = "MENU_ACTION_BEARBEITEN_PERIODENUEBERNAHME";
    protected final static String MENU_ACTION_GESCHAEFTSJAHR_AENDERUNG = "MENU_ACTION_GESCHAEFTSJAHR_AENDERUNG";
    protected final static String MENU_ACTION_LIQUIDITAETSVORSCHAU = "MENU_ACTION_LIQUIDITAETSVORSCHAU";
    protected final static String MENU_ACTION_GESCHAEFTSJAHR_SPERRE = "MENU_ACTION_GESCHAEFTSJAHR_SPERRE";
    protected final static String MENU_ACTION_OFFENPOSTEN = "menu_action_offeneposten";
    private static final String ACTION_SPECIAL_AUSZIFFERN_NEU = "action_special_ausziffern_neu";
    private static final String ACTION_SPECIAL_AUSZIFFERN_LOESCHEN = "action_special_ausziffern_loeschen";
    protected static final String ACTION_SPECIAL_NEUE_SPLITTBUCHUNG = "action_special_neue_splittbuchung";
    protected static final String ACTION_SPECIAL_UMBUCHUNG_AENDERN = "action_special_umbuchung_aendern";

    protected final static String MENU_INFO_AENDERUNGEN_KONTO = "MENU_INFO_AENDERUNGEN_KONTO";

    WrapperMenuItem menueItemStorno = null;

    private String kontotyp = null;
    // private String kontotyprichtig = null;
    private int usecaseId;

    public static int iDX_KONTEN = -1;
    public static int iDX_KOPFDATEN = -1;
    public static int iDX_BUCHUNGEN = -1;
    public static int iDX_KONTOLAENDERART = -1;
    public static int iDX_KONTOLAND = -1;

    // Eine gemeinsame Menubar fuer die Konten-Tabs

    private KontoDto kontoDto = null;

    private boolean bVollversion = false;

    private FinanzamtDto[] finanzamtDtos = null;

    private IGeschaeftsjahrViewController geschaeftsjahrViewController = null;
    private ICsvKontoImportController csvKontoImportController = null;

    private WrapperMenuItem[] menuItemUVAZuruecknehmenFa;

    private JLabel kontoSaldo;
    private JLabel wlbGeschaeftsjahrGesperrt = null;
    private Boolean geschaeftsjahrGesperrt;

    /**
     * Konstruktor.
     * 
     * @param internalFrameI
     *            InternalFrame
     * @param kontotyp
     *            String
     * @param sTitle
     *            String
     * @throws Throwable
     */
    public TabbedPaneKonten(InternalFrame internalFrameI, String kontotyp, String sTitle,
            IGeschaeftsjahrViewController viewController) throws Throwable {
        super(internalFrameI, sTitle);
        this.kontotyp = kontotyp;
        geschaeftsjahrViewController = viewController;
        csvKontoImportController = new CsvKontoImportController();

        if (kontotyp.equals(FinanzServiceFac.KONTOTYP_DEBITOR)) {
            usecaseId = QueryParameters.UC_ID_FINANZKONTEN_DEBITOREN;
        } else if (kontotyp.equals(FinanzServiceFac.KONTOTYP_KREDITOR)) {
            usecaseId = QueryParameters.UC_ID_FINANZKONTEN_KREDITOREN;
        } else if (kontotyp.equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
            usecaseId = QueryParameters.UC_ID_FINANZKONTEN_SACHKONTEN;
        }
        jbInit();
        initComponents();
        // kontotyprichtig = kontotyp;
    }

    protected KontoDto getKontoDto() {
        return kontoDto;
    }

    protected void setKontoDto(KontoDto kontoDto) throws Throwable {
        this.kontoDto = kontoDto;
        if (getKontoDto() != null) {
            getInternalFrame().setLpTitle(InternalFrame.TITLE_IDX_AS_I_LIKE, getKontoDto().getCNr() + " "
                    + getKontoDto().getCBez() + " " + getKontoDto().getPartnerKurzbezeichnung());
            if (panelKontolaenderartQP1 != null && getKontoDto().getIId() != null) {
                panelKontolaenderartQP1.setDefaultFilter(
                        FinanzFilterFactory.getInstance().createFKKontolaenderart(getKontoDto().getIId()));
            }
            if (panelKontoLandQP1 != null && getKontoDto().getIId() != null) {
                panelKontoLandQP1.setDefaultFilter(
                        FinanzFilterFactory.getInstance().createFKKontoland(getKontoDto().getIId()));
            }
        } else {
            getInternalFrame().setLpTitle(InternalFrame.TITLE_IDX_AS_I_LIKE, "");
        }
    }

    /**
     * Den Kontotyp holen.
     * 
     * @return String
     */
    public String getKontotyp() {
        return this.kontotyp;
    }

    private void jbInit() throws Throwable {
        int index = 0;
        // Berechtigungen
        bVollversion = ((InternalFrameFinanz) getInternalFrame()).getBVollversion();

        // Tab 1: Liste der Konten
        iDX_KONTEN = index;
        insertTab(LPMain.getTextRespectUISPr("finanz.konten"), null, null,
                LPMain.getTextRespectUISPr("finanz.konten"), iDX_KONTEN);
        index++;
        // Tab 2: Kopfdaten
        iDX_KOPFDATEN = index;
        insertTab(LPMain.getTextRespectUISPr("lp.kopfdaten"), null, null,
                LPMain.getTextRespectUISPr("lp.kopfdaten"), iDX_KOPFDATEN);
        index++;
        if (bVollversion) {
            // Tab 3: Liste der Buchungen am Konto
            iDX_BUCHUNGEN = index;
            insertTab(LPMain.getTextRespectUISPr("finanz.buchungen"), null, null,
                    LPMain.getTextRespectUISPr("finanz.buchungen"), iDX_BUCHUNGEN);
            index++;
        }
        if (kontotyp.equals(FinanzServiceFac.KONTOTYP_KREDITOR)
                || kontotyp.equals(FinanzServiceFac.KONTOTYP_DEBITOR)) {
            // skip
        } else {
            // Tab 4: KontoLaenderart
            iDX_KONTOLAENDERART = index;
            insertTab(LPMain.getTextRespectUISPr("finanz.tab.oben.kontolaenderart.title"), null, null,
                    LPMain.getTextRespectUISPr("finanz.tab.oben.kontolaenderart.tooltip"), iDX_KONTOLAENDERART);
            index++;
            // Tab 5: KontoLand
            iDX_KONTOLAND = index;
            insertTab(LPMain.getTextRespectUISPr("finanz.tab.oben.kontoland.title"), null, null,
                    LPMain.getTextRespectUISPr("finanz.tab.oben.kontoland.tooltip"), iDX_KONTOLAND);
            index++;
        }
        // Default
        this.setSelectedComponent(getPanelQueryKonten());
        // refresh
        // getPanelQueryKonten().eventYouAreSelected(false);
        // damit gleich eine selektiert ist
        // ItemChangedEvent it = new ItemChangedEvent(getPanelQueryKonten(),
        // ItemChangedEvent.ITEM_CHANGED);
        // lPEventItemChanged(it);
        // Listener
        addChangeListener(this);
        getInternalFrame().addItemChangedListener(this);
    }

    /**
     * initPanelTop1QueryKonten.
     * 
     * @return PanelQuery
     * @throws Throwable
     */
    private PanelQuery getPanelQueryKonten() throws Throwable {
        if (panelQueryKonten == null) {
            String[] aWhichButtonIUseKonten = { PanelBasis.ACTION_NEW };
            FilterKriterium[] filtersKonten = buildFiltersKonten();

            panelQueryKonten = new PanelQuery(null, filtersKonten, usecaseId, aWhichButtonIUseKonten,
                    getInternalFrame(), LPMain.getTextRespectUISPr("lp.auswahl"), true);
            FilterKriteriumDirekt fkDirekt1 = FinanzFilterFactory.getInstance().createFKDKontonummer();
            FilterKriteriumDirekt fkDirekt2 = FinanzFilterFactory.getInstance().createFKDKontobezeichnung();
            FilterKriterium fkVersteckt = FinanzFilterFactory.getInstance().createFKVKonto();
            panelQueryKonten.befuellePanelFilterkriterienDirektUndVersteckte(fkDirekt1, fkDirekt2, fkVersteckt);
            this.setComponentAt(iDX_KONTEN, panelQueryKonten);
            revalidate(); // todo: ghp workaround?
        }
        return panelQueryKonten;
    }

    public void lPEventItemChanged(ItemChangedEvent e) throws Throwable {
        if (e.getID() == ItemChangedEvent.GOTO_DETAIL_PANEL) {
            // da will jemand die Buchungen ansehen
            if (e.getSource() == getPanelQueryKonten()) {
                Object key = getPanelQueryKonten().getSelectedId();
                holeKontoDto(key);
                // nur wechseln wenns auch einen gibt
                if (key != null) {
                    if (bVollversion) {
                        setSelectedComponent(getPanelSplit3());
                        getPanelSplit3().eventYouAreSelected(false);
                    } else {
                        setSelectedComponent(getPanelDetailKontoKopfdaten());
                        getPanelDetailKontoKopfdaten().eventYouAreSelected(false);
                    }
                }
            }
        } else if (e.getID() == ItemChangedEvent.ACTION_PRINT) {
            if (e.getSource().equals(panelQueryBuchungen) && panelQueryBuchungen.getSelectedId() != null) {
                BuchungdetailDto detail = DelegateFactory.getInstance().getBuchenDelegate()
                        .buchungdetailFindByPrimaryKey((Integer) panelQueryBuchungen.getSelectedId());
                getInternalFrame().showReportKriterien(new ReportBuchungsbeleg(getInternalFrameFinanz(),
                        LPMain.getTextRespectUISPr("fb.report.buchungsbeleg"), detail.getBuchungIId()));
            }
        } else if (e.getID() == ItemChangedEvent.ITEM_CHANGED) {
            if (e.getSource() == getPanelQueryKonten()) {
                Object key = getPanelQueryKonten().getSelectedId();
                holeKontoDto(key);
                getInternalFrame().enableAllOberePanelsExceptMe(this, iDX_KONTEN, key != null);
                // if (key == null) {
                // getInternalFrame().enableAllOberePanelsExceptMe(this,
                // iDX_KONTEN, false);
                // } else {
                // getInternalFrame().enableAllOberePanelsExceptMe(this,
                // iDX_KONTEN, true);
                // }
                getPanelQueryKonten().updateButtons();
            } else if (e.getSource() == panelQueryBuchungen) {
                Integer iId = (Integer) panelQueryBuchungen.getSelectedId();
                // ghp holeKontoDto(iId) ;
                panelDetailBuchung.setKeyWhenDetailPanel(iId);
                panelDetailBuchung.eventYouAreSelected(false);

                // ghp panelQueryBuchungen.setKeyWhenDetailPanel(iId) ;
                panelQueryBuchungen.updateButtons();
                berechneSaldo();

                // ghp panelDetailBuchung.invalidate();
                // ghp panelQueryBuchungen.invalidate() ;
            } else if (e.getSource() == panelKontolaenderartQP1) {
                Object key = ((ISourceEvent) e.getSource()).getIdSelected();
                panelKontolaenderart.setKeyWhenDetailPanel(key);
                panelKontolaenderart.eventYouAreSelected(false);
                panelKontolaenderartQP1.updateButtons();
            } else if (e.getSource() == panelKontoLandQP1) {
                Object key = ((ISourceEvent) e.getSource()).getIdSelected();
                panelKontoLand.setKeyWhenDetailPanel(key);
                panelKontoLand.eventYouAreSelected(false);
                panelKontoLandQP1.updateButtons();
            }
        } else if (e.getID() == ItemChangedEvent.ACTION_NEW) {
            if (e.getSource() == getPanelQueryKonten()) {
                if (getPanelQueryKonten().getSelectedId() == null) {
                    getInternalFrame().enableAllPanelsExcept(true);
                }
                getPanelDetailKontoKopfdaten().eventActionNew(null, true, false);
                setSelectedComponent(getPanelDetailKontoKopfdaten());
            } else if (e.getSource() == panelKontolaenderartQP1) {
                panelKontolaenderart.eventActionNew(e, true, false);
                panelKontolaenderart.eventYouAreSelected(false);
                /*
                 * // locknew: 2 den Panels den richtigen lockstatus geben
                 * 
                 * LockStateValue lockstateValue = new LockStateValue(null,
                 * null, PanelBasis.LOCK_FOR_NEW);
                 * panelKontolaenderart.updateButtons(lockstateValue);
                 * panelKontolaenderartQP1.updateButtons();
                 */
            } else if (e.getSource() == panelKontoLandQP1) {
                panelKontoLand.eventActionNew(e, true, false);
                panelKontoLand.eventYouAreSelected(false);

                /*
                 * LockStateValue lockstateValue = new LockStateValue(null,
                 * null, PanelBasis.LOCK_FOR_NEW);
                 * panelKontoLand.updateButtons(lockstateValue);
                 * panelKontoLandQP1.updateButtons();
                 */
            }
        } else if (e.getID() == ItemChangedEvent.ACTION_GOTO_MY_DEFAULT_QP) {
            if (e.getSource() == getPanelDetailKontoKopfdaten()) {
                this.setSelectedComponent(getPanelQueryKonten());
                getPanelQueryKonten().eventYouAreSelected(false);
            } else if (e.getSource() == panelKontolaenderart) {
                panelSplitKontolaenderart.eventYouAreSelected(false);
            } else if (e.getSource() == panelKontoLand) {
                panelSplitKontoLand.eventYouAreSelected(false);
            }
        } else if (e.getID() == ItemChangedEvent.ACTION_DISCARD) {
            if (e.getSource() == getPanelDetailKontoKopfdaten()) {
                // nix
            } else if (e.getSource() == panelKontolaenderart) {
                panelSplitKontolaenderart.eventYouAreSelected(false);
            } else if (e.getSource() == panelKontoLand) {
                panelSplitKontoLand.eventYouAreSelected(false);
            } else if (e.getSource() == panelUmbuchung || e.getSource() == panelSplittbuchung) {
                if (this.panelSplit3 != null) {
                    // Object key = getPanelQueryKonten().getSelectedId();
                    // holeKontoDto(key);
                    if (getInternalFrame().getSelectedTabbedPane().equals(this))
                        panelSplit3.eventYouAreSelected(false);
                }
            }

        } else if (e.getID() == ItemChangedEvent.ACTION_SAVE) {
            if (e.getSource() == panelKontolaenderart) {
                Object key = panelKontolaenderart.getKeyWhenDetailPanel();
                panelSplitKontolaenderart.eventYouAreSelected(false);
                panelKontolaenderartQP1.setSelectedId(key);
                panelSplitKontolaenderart.eventYouAreSelected(false);
            } else if (e.getSource() == panelKontoLand) {
                Object key = panelKontoLand.getKeyWhenDetailPanel();
                panelSplitKontoLand.eventYouAreSelected(false);
                panelKontoLandQP1.setSelectedId(key);
                panelSplitKontoLand.eventYouAreSelected(false);
            } else if (e.getSource() == panelDetailKontoKopfdaten) {
                getPanelQueryKonten().clearDirektFilter();
                Object key = getPanelDetailKontoKopfdaten().getKeyWhenDetailPanel();
                getPanelQueryKonten().eventYouAreSelected(false);
                getPanelQueryKonten().setSelectedId(key);
                getPanelQueryKonten().eventYouAreSelected(false);

            }
        } else if (e.getID() == ItemChangedEvent.ACTION_SPECIAL_BUTTON) {
            if (e.getSource() == panelQueryBuchungen) {
                String sAspectInfo = ((ISourceEvent) e.getSource()).getAspect();
                if (sAspectInfo.contains(ACTION_SPECIAL_UMBUCHUNG_AENDERN)) {
                    buchungAendern();
                } else if (sAspectInfo.contains(ACTION_SPECIAL_AUSZIFFERN_NEU)) {
                    Object[] ids = panelQueryBuchungen.getSelectedIds();
                    if (ids != null && ids.length > 0) {
                        Integer[] iIds = new Integer[ids.length];
                        System.arraycopy(ids, 0, iIds, 0, ids.length);
                        DelegateFactory.getInstance().getFinanzServiceDelegate().createAuszifferung(iIds);
                        panelQueryBuchungen.eventActionRefresh(null, false);
                    }

                } else if (sAspectInfo.contains(ACTION_SPECIAL_AUSZIFFERN_LOESCHEN)) {
                    Object[] ids = panelQueryBuchungen.getSelectedIds();
                    if (ids != null && ids.length > 0) {
                        Integer[] iIds = new Integer[ids.length];
                        System.arraycopy(ids, 0, iIds, 0, ids.length);
                        DelegateFactory.getInstance().getFinanzServiceDelegate().removeAuszifferung(iIds);
                        panelQueryBuchungen.eventActionRefresh(null, false);
                    }
                } else if (sAspectInfo.contains(ACTION_SPECIAL_NEUE_SPLITTBUCHUNG)) {
                    Integer id = (Integer) panelQueryBuchungen.getSelectedId();

                    PanelFinanzSplittbuchung sb = getPanelSplittbuchung();
                    BuchungdetailDto detail = DelegateFactory.getInstance().getBuchenDelegate()
                            .buchungdetailFindByPrimaryKey(id);
                    sb.setBuchungDto(DelegateFactory.getInstance().getBuchenDelegate()
                            .buchungFindByPrimaryKey(detail.getBuchungIId()), this);
                    getInternalFrame().showPanelDialog(sb);
                }
            }
        } else if (e.getID() == ItemChangedEvent.ACTION_YOU_ARE_SELECTED) {
            super.lPEventItemChanged(e);
        }
    }

    private void berechneSaldo() throws ExceptionLP, Throwable {
        kontoSaldo
                .setText(
                        LPMain.getTextRespectUISPr("finanz.saldo")
                                + " = " + Helper
                                        .formatZahl(
                                                DelegateFactory.getInstance().getBuchenDelegate()
                                                        .getSaldoVonKontoMitEB(kontoDto.getIId(),
                                                                getInternalFrameFinanz()
                                                                        .getIAktuellesGeschaeftsjahr(),
                                                                -1),
                                                LPMain.getTheClient().getLocUi())
                                + " " + LPMain.getTheClient().getSMandantenwaehrung());
    }

    private void buchungAendern() throws Throwable {
        Integer iId = (Integer) panelQueryBuchungen.getSelectedId();
        panelDetailBuchung.setKeyWhenDetailPanel(iId);
        panelDetailBuchung.eventYouAreSelected(false);
        BuchungdetailDto buchungdetailDto = DelegateFactory.getInstance().getBuchenDelegate()
                .buchungdetailFindByPrimaryKey(iId);
        BuchungdetailDto[] bDetails = DelegateFactory.getInstance().getBuchenDelegate()
                .buchungdetailsFindByBuchungIIdOhneMitlaufende(buchungdetailDto.getBuchungIId());
        BuchungDto buchungDto = DelegateFactory.getInstance().getBuchenDelegate()
                .buchungFindByPrimaryKey(buchungdetailDto.getBuchungIId());
        if (bDetails.length > 3 || (bDetails[0].getNUst().signum() == 0 && bDetails.length > 2)) {
            // ist eine Splittbuchung, derzeit nicht editierbar
            PanelFinanzSplittbuchung sb = getPanelSplittbuchung();
            sb.setBuchungDto(buchungDto, this, true);

            getInternalFrame().showPanelDialog(sb);
        } else {
            PanelFinanzUmbuchung ub = getPanelUmbuchung();
            ub.setGeschaeftsjahr(getInternalFrameFinanz().getIAktuellesGeschaeftsjahr());
            ub.setBuchungDto(buchungDto, this);
            getInternalFrame().showPanelDialog(ub);
        }
    }

    /**
     * hole KassenbuchDto.
     * 
     * @param key
     *            Object
     * @throws Throwable
     */
    private void holeKontoDto(Object key) throws Throwable {
        if (key != null) {
            setKontoDto(DelegateFactory.getInstance().getFinanzDelegate().kontoFindByPrimaryKey((Integer) key));
            getInternalFrame().setKeyWasForLockMe(key.toString());
            getPanelDetailKontoKopfdaten().setKeyWhenDetailPanel(key);
        }
    }

    public void lPEventObjectChanged(ChangeEvent e) throws Throwable {
        super.lPEventObjectChanged(e);
        // lazy loading und titel setzen
        int index = this.getSelectedIndex();
        if (menueItemStorno != null) {
            menueItemStorno.setEnabled(false);
        }
        if (index == iDX_KONTEN) {
            invalidate();
            getPanelQueryKonten().eventYouAreSelected(false);
        } else if (index == iDX_KOPFDATEN) {
            getPanelDetailKontoKopfdaten().eventYouAreSelected(false);
        } else if (index == iDX_BUCHUNGEN) {
            resetPanelSplit3();

            if (menueItemStorno != null) {
                menueItemStorno.setEnabled(true);
            }

            invalidate();
            panelQueryBuchungen.setDefaultFilter(buildFiltersBuchungen());
            panelQueryBuchungen.eventYouAreSelected(false);
        } else if (index == iDX_KONTOLAENDERART) {
            refreshKontolaenderart();
            panelSplitKontolaenderart.eventYouAreSelected(false);
        } else if (index == iDX_KONTOLAND) {
            refreshKontoLand();
            panelSplitKontoLand.eventYouAreSelected(false);
        }

        if (getKontoDto() != null) {
            getInternalFrame().setLpTitle(InternalFrame.TITLE_IDX_AS_I_LIKE, getKontoDto().getCNr() + " "
                    + getKontoDto().getCBez() + " " + getKontoDto().getPartnerKurzbezeichnung());

        } else {
            getInternalFrame().setLpTitle(InternalFrame.TITLE_IDX_AS_I_LIKE, "");
        }

    }

    private FilterKriterium[] buildFiltersBuchungen() throws Throwable {
        FilterKriterium[] filtersAll = null;

        if (getKontoDto() != null) {
            filtersAll = Helper.copyFilterKriterium(
                    FinanzFilterFactory.getInstance().createFKBuchungDetail(getKontoDto().getIId()), 1);

            filtersAll[filtersAll.length - 1] = ((InternalFrameFinanz) getInternalFrame())
                    .getFKforAktuellesGeschaeftsjahrInDetails();
            // filtersAll[filtersAll.length - 1] = new FilterKriterium(
            // FinanzFac.FLR_BUCHUNGDETAIL_FLRBUCHUNG + "."
            // + FinanzFac.FLR_BUCHUNG_GESCHAEFTSJAHR_I_GESCHAEFTSJAHR,
            // true,
            // "'"
            // + ((InternalFrameFinanz)
            // getInternalFrame()).getAktuellesGeschaeftsjahr()
            // + "'", FilterKriterium.OPERATOR_EQUAL, false);
        }

        return filtersAll;
    }

    private FilterKriterium[] buildFiltersKonten() throws Throwable {
        FilterKriterium[] filter = null;
        if (this.kontotyp.equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
            filter = FinanzFilterFactory.getInstance().createFKSachkontenInklMitlaufende();
        } else if (this.kontotyp.equals(FinanzServiceFac.KONTOTYP_DEBITOR)) {
            filter = FinanzFilterFactory.getInstance().createFKDebitorenkonten();
        } else {
            filter = FinanzFilterFactory.getInstance().createFKKreditorenkonten();
        }
        return filter;
    }

    private void initPanelTop3QueryBuchungen() throws Throwable {
        if (panelQueryBuchungen == null) {
            QueryType[] qtBuchungen = FinanzFilterFactory.getInstance().createQTBuchungDetail();
            String[] aWhichButtonIUseBuchungen = { PanelBasis.ACTION_REFRESH, PanelBasis.ACTION_FILTER,
                    // PanelBasis.ALWAYSENABLED + "ausziffern_neu",
                    // PanelBasis.ACTION_LEEREN + "ausziffern",
                    // PanelBasis.ALWAYSENABLED + "ausziffern_loeschen",
                    PanelBasis.ACTION_PRINT };
            FilterKriterium[] filtersBuchungen = buildFiltersBuchungen();

            panelQueryBuchungen = new PanelQuery(qtBuchungen, filtersBuchungen, QueryParameters.UC_ID_BUCHUNGDETAIL,
                    aWhichButtonIUseBuchungen, getInternalFrame(), LPMain.getTextRespectUISPr("finanz.buchungen"),
                    true);

            panelQueryBuchungen.createAndSaveAndShowButton("/com/lp/client/res/edit.png",
                    LPMain.getTextRespectUISPr("finanz.buchung.aendern"),
                    PanelBasis.LEAVEALONE + ACTION_SPECIAL_UMBUCHUNG_AENDERN, null, null);

            // if (!kontotyp.equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
            panelQueryBuchungen.createAndSaveAndShowButton("/com/lp/client/res/link_add.png",
                    LPMain.getTextRespectUISPr("fb.ausziffern.neu"),
                    PanelBasis.ALWAYSENABLED + ACTION_SPECIAL_AUSZIFFERN_NEU, null, null);

            // panelQueryBuchungen.createAndSaveAndShowButton(
            // "/com/lp/client/res/link.png",
            // LPMain.getTextRespectUISPr("fb.ausziffern.hinzu"),
            // PanelBasis.ALWAYSENABLED + ACTION_SPECIAL_AUSZIFFERN_HINZU,
            // null, null);

            panelQueryBuchungen.createAndSaveAndShowButton("/com/lp/client/res/link_delete.png",
                    LPMain.getTextRespectUISPr("fb.ausziffern.entfernen"),
                    PanelBasis.ALWAYSENABLED + ACTION_SPECIAL_AUSZIFFERN_LOESCHEN, null, null);
            panelQueryBuchungen.createAndSaveAndShowButton("/com/lp/client/res/note_new.png",
                    LPMain.getTextRespectUISPr("finanz.neueSplittbuchungAusBuchung"),
                    PanelBasis.LEAVEALONE + ACTION_SPECIAL_NEUE_SPLITTBUCHUNG, null, null);
            panelQueryBuchungen.updateButtons();
            // }

            panelQueryBuchungen.befuellePanelFilterkriterienDirektUndVersteckte(
                    FinanzFilterFactory.getInstance().createFKDBelegnummer(),
                    FinanzFilterFactory.getInstance().createFKDTextsuche(),
                    FinanzFilterFactory.getInstance().createFKVBuchungStorno(),
                    LPMain.getTextRespectUISPr("lp.plusstornierte"));
            if (showNurOffeneInBuchungen())
                panelQueryBuchungen.befuelleFilterkriteriumSchnellansicht(
                        FinanzFilterFactory.getInstance().createFKSchnellansicht());

            kontoSaldo = new JLabel();
            wlbGeschaeftsjahrGesperrt = new JLabel();

            // wlbGeschaeftsjahrGesperrt.setPreferredSize(new Dimension(Defaults
            // .getInstance().bySizeFactor(250), 0));
            wlbGeschaeftsjahrGesperrt.setForeground(Color.RED);
            wlbGeschaeftsjahrGesperrt.setFont(wlbGeschaeftsjahrGesperrt.getFont().deriveFont(Font.BOLD));
            isGeschaeftsjahrGesperrt();

            panelQueryBuchungen.getToolBar().getToolsPanelCenter().add(wlbGeschaeftsjahrGesperrt);
            panelQueryBuchungen.getToolBar().getToolsPanelCenter().add(kontoSaldo);

        }
        // Filter updaten
        panelQueryBuchungen.setDefaultFilter(buildFiltersBuchungen());
    }

    protected boolean isGeschaeftsjahrGesperrt() throws ExceptionLP, Throwable {
        if (geschaeftsjahrGesperrt == null)
            geschaeftsjahrGesperrt = DelegateFactory.getInstance().getSystemDelegate().isGeschaeftsjahrGesperrt(
                    ((InternalFrameFinanz) getInternalFrame()).getIAktuellesGeschaeftsjahr());
        wlbGeschaeftsjahrGesperrt.setVisible(geschaeftsjahrGesperrt);
        wlbGeschaeftsjahrGesperrt.setText(LPMain.getMessageTextRespectUISPr("finanz.error.geschaeftsjahrgesperrt",
                ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr()));
        return geschaeftsjahrGesperrt;
    }

    protected boolean showNurOffeneInBuchungen() {
        return true;
    }

    /**
     * Drucken des Kontoblattes
     * 
     * @throws Throwable
     */
    protected void printKontoblatt() throws Throwable {
        if (getKontoDto() != null) {
            Integer kontoIId = getKontoDto().getIId();
            BuchungdetailDto[] buchungen = DelegateFactory.getInstance().getBuchenDelegate()
                    .buchungdetailFindByKontoIId(kontoIId);
            if (buchungen.length == 0) {
                DialogFactory.showModalDialog(LPMain.getTextRespectUISPr("lp.error"),
                        "Keine Buchungen auf diesem Konto");
            } else {
                String sTitle = kontoDto.getCNr() + " " + LPMain.getTextRespectUISPr("finanz.buchungen");
                getInternalFrame()
                        .showReportKriterien(new ReportBuchungenAufKonto(getInternalFrame(), kontoDto, sTitle));
            }
        } else {
            DialogFactory.showModalDialog(LPMain.getTextRespectUISPr("lp.error"), "Keine Daten zu drucken");
        }
    }

    private PanelFinanzKontoKopfdaten getPanelDetailKontoKopfdaten() throws Throwable {
        if (panelDetailKontoKopfdaten == null) {
            panelDetailKontoKopfdaten = new PanelFinanzKontoKopfdaten(getInternalFrame(),
                    LPMain.getTextRespectUISPr("lp.kopfdaten"), null, this);
            if (usecaseId == QueryParameters.UC_ID_FINANZKONTEN_SACHKONTEN) {
                panelDetailKontoKopfdaten.setPrintKontoart(true);
            } else {
                panelDetailKontoKopfdaten.setPrintKontoart(false);
            }
            this.setComponentAt(iDX_KOPFDATEN, panelDetailKontoKopfdaten);
        }
        return panelDetailKontoKopfdaten;
    }

    /*
     * Ein Neuladen des Splitpanels f&uuml;r Buchungen&Details erzwingen
     */
    private PanelSplit resetPanelSplit3() throws Throwable {
        panelSplit3 = null;
        panelQueryBuchungen = null;
        return getPanelSplit3();
    }

    private PanelSplit getPanelSplit3() throws Throwable {
        if (panelSplit3 == null) {
            panelDetailBuchung = new PanelFinanzBuchungDetails(getInternalFrame(), "Buchungen", this);
            initPanelTop3QueryBuchungen();
            panelSplit3 = new PanelSplit(getInternalFrame(), panelDetailBuchung, panelQueryBuchungen, 280);
            this.setComponentAt(iDX_BUCHUNGEN, panelSplit3);
            panelQueryBuchungen.setMultipleRowSelectionEnabled(true);

        }
        return panelSplit3;
    }

    protected PanelQuery getPanelQueryBuchungen() {
        return panelQueryBuchungen;
    }

    private void refreshKontolaenderart() throws Throwable {

        if (panelSplitKontolaenderart == null) {
            String[] aWhichButtonIUse = { PanelBasis.ACTION_NEW };

            panelKontolaenderartQP1 = new PanelQuery(null, null, QueryParameters.UC_ID_KONTOLAENDERART,
                    aWhichButtonIUse, getInternalFrame(),
                    LPMain.getTextRespectUISPr("finanz.tab.oben.kontolaenderart.title"), true);

            panelKontolaenderart = new PanelFinanzKontolaenderart(getInternalFrame(),
                    LPMain.getTextRespectUISPr("finanz.tab.oben.kontolaenderart.title"), null, this);

            panelSplitKontolaenderart = new PanelSplit(getInternalFrame(), panelKontolaenderart,
                    panelKontolaenderartQP1, 200);
            setComponentAt(iDX_KONTOLAENDERART, panelSplitKontolaenderart);
            panelKontolaenderartQP1.setDefaultFilter(
                    FinanzFilterFactory.getInstance().createFKKontolaenderart(getKontoDto().getIId()));

            // liste soll sofort angezeigt werden
            panelKontolaenderartQP1.eventYouAreSelected(true);
        }
    }

    private void refreshKontoLand() throws Throwable {

        if (panelSplitKontoLand == null) {
            String[] aWhichButtonIUse = { PanelBasis.ACTION_NEW };

            panelKontoLandQP1 = new PanelQuery(null, null, QueryParameters.UC_ID_KONTOLAND, aWhichButtonIUse,
                    getInternalFrame(), LPMain.getTextRespectUISPr("finanz.tab.oben.kontolaenderart.title"), true);

            panelKontoLand = new PanelFinanzKontoLand(getInternalFrame(),
                    LPMain.getTextRespectUISPr("finanz.tab.oben.kontoland.title"), null, this);

            panelSplitKontoLand = new PanelSplit(getInternalFrame(), panelKontoLand, panelKontoLandQP1, 200);
            setComponentAt(iDX_KONTOLAND, panelSplitKontoLand);
            panelKontoLandQP1
                    .setDefaultFilter(FinanzFilterFactory.getInstance().createFKKontoland(getKontoDto().getIId()));

            // liste soll sofort angezeigt werden
            panelKontoLandQP1.eventYouAreSelected(true);
        }
    }

    private void addImportMenuItem(JMenu menu) throws Throwable {
        WrapperMenuItem menueItemImportKonten = new WrapperMenuItem(
                LPMain.getTextRespectUISPr("finanz.importkonten"), RechteFac.RECHT_FB_CHEFBUCHHALTER);
        menueItemImportKonten.addActionListener(this);
        menueItemImportKonten.setActionCommand(MENU_ACTION_BEARBEITEN_IMPORTKONTEN);
        menu.add(menueItemImportKonten, 0);
    }

    protected final javax.swing.JMenuBar getJMenuBar() throws Throwable {
        WrapperMenuBar wmbKonten = new WrapperMenuBar(this);
        JMenu jmDatei = (JMenu) wmbKonten.getComponent(WrapperMenuBar.MENU_MODUL);
        JMenu jmBearbeiten = (JMenu) wmbKonten.getComponent(WrapperMenuBar.MENU_BEARBEITEN);
        JMenu jmJournal = (JMenu) wmbKonten.getComponent(WrapperMenuBar.MENU_JOURNAL);
        if (bVollversion) {
            // Menu Datei
            /*
             * JMenu menuDrucken = new WrapperMenu("lp.menu.drucken", this);
             * jmDatei.add(new JSeparator(), 0); jmDatei.add(menuDrucken, 0); //
             * Kontoblatt WrapperMenuItem menueItemKontoblatt = null;
             * menueItemKontoblatt = new WrapperMenuItem("Kontoblatt", null);
             * menueItemKontoblatt.addActionListener(this); menueItemKontoblatt
             * .setActionCommand(MENU_ACTION_DATEI_DRUCKEN_KONTOBLATT);
             * menuDrucken.add(menueItemKontoblatt);
             */
            // Menu Bearbeiten
            // JMenu menuePeriode = new
            // WrapperMenu("fb.menu.geschaeftsjahr",
            // this);
            // Map<?, ?> mapGJ = DelegateFactory.getInstance()
            // .getSystemDelegate().getAllGeschaeftsjahr();
            // ButtonGroup bgGJ = new ButtonGroup();
            // for (Iterator<?> iter = mapGJ.keySet().iterator(); iter
            // .hasNext();) {
            // Integer item = (Integer) iter.next();
            // JRadioButtonMenuItem menueItem = new JRadioButtonMenuItem(
            // item.toString());
            // menueItem.addActionListener(this);
            // menueItem
            // .setActionCommand(TabbedPaneKonten.MENU_ACTION_GESCHAEFTSJAHR_AENDERUNG
            // + item.toString());
            // if (iter.hasNext() == false) {
            // menueItem.setSelected(true);
            // ((InternalFrameFinanz)
            // getInternalFrame()).setAktuellesGeschaeftsjahr(item
            // .toString());
            // }
            // menuePeriode.add(menueItem, 0);
            // bgGJ.add(menueItem);
            // }

            addImportMenuItem(jmDatei);

            JMenu menuePeriode = geschaeftsjahrViewController.getGeschaeftsJahreMenue(this, this);
            jmBearbeiten.add(menuePeriode);

            WrapperMenuItem menueItemManuelleBuchung = null;
            menueItemManuelleBuchung = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.manuellebuchung"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menueItemManuelleBuchung.addActionListener(this);
            menueItemManuelleBuchung.setActionCommand(MENU_ACTION_MANUELLE_BUCHUNG);
            menueItemManuelleBuchung.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.CTRL_MASK));
            jmBearbeiten.add(menueItemManuelleBuchung);

            WrapperMenuItem menueItemSplittbuchung = null;
            menueItemSplittbuchung = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.splittbuchung"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menueItemSplittbuchung.addActionListener(this);
            menueItemSplittbuchung.setActionCommand(MENU_ACTION_SPLITTBUCHUNG);
            menueItemSplittbuchung.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.CTRL_MASK));
            jmBearbeiten.add(menueItemSplittbuchung);

            menueItemStorno = new WrapperMenuItem(LPMain.getTextRespectUISPr("finanz.buchungstornieren"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menueItemStorno.addActionListener(this);
            menueItemStorno.setActionCommand(MENU_ACTION_BEARBEITEN_STORNIEREN);
            jmBearbeiten.add(menueItemStorno);

            WrapperMenuItem menueItemBeleguebernahme = null;
            menueItemBeleguebernahme = new WrapperMenuItem(LPMain.getTextRespectUISPr("finanz.beleguebernahme"),
                    RechteFac.RECHT_FB_CHEFBUCHHALTER);
            menueItemBeleguebernahme.addActionListener(this);
            menueItemBeleguebernahme.setActionCommand(MENU_ACTION_BEARBEITEN_BELEGUEBERNAHME);
            jmBearbeiten.add(menueItemBeleguebernahme);

            finanzamtDtos = DelegateFactory.getInstance().getFinanzDelegate()
                    .finanzamtFindAllByMandantCNr(LPMain.getTheClient());
            JMenu menuItemUVAZuruecknehmen = null;
            menuItemUVAZuruecknehmen = new JMenu(LPMain.getTextRespectUISPr("fb.menu.uvazuruecknehmen"));

            menuItemUVAZuruecknehmenFa = new WrapperMenuItem[finanzamtDtos.length];
            for (int i = 0; i < finanzamtDtos.length; i++) {
                menuItemUVAZuruecknehmenFa[i] = new WrapperMenuItem(finanzamtDtos[i].getPartnerDto().formatName(),
                        RechteFac.RECHT_FB_CHEFBUCHHALTER);
                menuItemUVAZuruecknehmenFa[i].addActionListener(this);
                menuItemUVAZuruecknehmenFa[i].setActionCommand(MENU_ACTION_UVA_ZURUECKNEHMEN + "|" + i);
                menuItemUVAZuruecknehmen.add(menuItemUVAZuruecknehmenFa[i], 0);
            }
            updateUvaMenus(); // letzte Verprobung im Menutext eintragen
            jmBearbeiten.add(menuItemUVAZuruecknehmen);

            WrapperMenuItem menuItemGeschaeftsjahrSperre = new WrapperMenuItem(
                    LPMain.getTextRespectUISPr("fb.geschaftsjahrsperre"), RechteFac.RECHT_FB_CHEFBUCHHALTER);
            menuItemGeschaeftsjahrSperre.addActionListener(this);
            menuItemGeschaeftsjahrSperre.setActionCommand(MENU_ACTION_GESCHAEFTSJAHR_SPERRE);
            jmBearbeiten.add(menuItemGeschaeftsjahrSperre);

            WrapperMenuItem menuItemPeriodenuebernahme = new WrapperMenuItem(
                    LPMain.getTextRespectUISPr("finanz.periodenuebernahme"), RechteFac.RECHT_FB_CHEFBUCHHALTER);
            menuItemPeriodenuebernahme.addActionListener(this);
            menuItemPeriodenuebernahme.setActionCommand(MENU_ACTION_BEARBEITEN_PERIODENUEBERNAHME);
            jmBearbeiten.add(menuItemPeriodenuebernahme);

            // Finananzamtsbuchungen
            WrapperMenuItem menuItemTagesabschluss = null;
            menuItemTagesabschluss = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.finanzamtsbuchungen"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menuItemTagesabschluss.addActionListener(this);
            menuItemTagesabschluss.setActionCommand(MENU_ACTION_FINANZAMTSBUCHUNGEN);
            jmBearbeiten.add(menuItemTagesabschluss);

            // Menu Journal
            WrapperMenuItem menueItemKonten = null;
            menueItemKonten = new WrapperMenuItem(LPMain.getTextRespectUISPr("finanz.konten"), null);
            menueItemKonten.addActionListener(this);
            if (kontotyp.equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
                menueItemKonten.setActionCommand(MENU_ACTION_JOURNAL_KONTEN);
            } else if (kontotyp.equals(FinanzServiceFac.KONTOTYP_DEBITOR)) {
                menueItemKonten.setActionCommand(MENU_ACTION_JOURNAL_KONTEN_DEBI);
            } else {
                menueItemKonten.setActionCommand(MENU_ACTION_JOURNAL_KONTEN_KREDI);
            }
            jmJournal.add(menueItemKonten);

            WrapperMenuItem menueItemSaldenliste = null;
            menueItemSaldenliste = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.saldenliste"), null);
            menueItemSaldenliste.addActionListener(this);
            menueItemSaldenliste.setActionCommand(MENU_ACTION_SALDENLISTE);
            jmJournal.add(menueItemSaldenliste);

            WrapperMenuItem menueItemBilanz = null;
            menueItemBilanz = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.bilanz"),
                    RechteFac.RECHT_LP_FINANCIAL_INFO_TYP_1);
            menueItemBilanz.addActionListener(this);
            menueItemBilanz.setActionCommand(MENU_ACTION_BILANZ);
            jmJournal.add(menueItemBilanz);
            WrapperMenuItem menueItemErfolgsrechnung = null;
            menueItemErfolgsrechnung = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.erfolgsrechnung"),
                    RechteFac.RECHT_LP_FINANCIAL_INFO_TYP_1);
            menueItemErfolgsrechnung.addActionListener(this);
            menueItemErfolgsrechnung.setActionCommand(MENU_ACTION_ERFOLGSRECHNUNG);
            jmJournal.add(menueItemErfolgsrechnung);

            WrapperMenuItem menuItemUVA = null;
            menuItemUVA = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.uva"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menuItemUVA.addActionListener(this);
            menuItemUVA.setActionCommand(MENU_ACTION_UVA);
            jmJournal.add(menuItemUVA);

            WrapperMenuItem menuItemSteuernachweis = null;
            menuItemSteuernachweis = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.menu.ustverprobung"),
                    RechteFac.RECHT_FB_FINANZ_CUD);
            menuItemSteuernachweis.addActionListener(this);
            menuItemSteuernachweis.setActionCommand(MENU_ACTION_USTVERPROBUNG);
            jmJournal.add(menuItemSteuernachweis);

            if (LPMain.getInstance().getDesktop()
                    .darfAnwenderAufZusatzfunktionZugreifen(MandantFac.ZUSATZFUNKTION_LIQUIDITAETSVORSCHAU)) {
                // PJ16999
                WrapperMenuItem menuItemLiqu = null;
                menuItemLiqu = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.report.liquiditaetsvorschau"),
                        RechteFac.RECHT_FB_FINANZ_CUD);
                menuItemLiqu.addActionListener(this);
                menuItemLiqu.setActionCommand(MENU_ACTION_LIQUIDITAETSVORSCHAU);
                jmJournal.add(menuItemLiqu);
            }

            JMenu menuInfo = new WrapperMenu("lp.info", this);
            WrapperMenuItem menueItemKontoblaetter = null;
            menueItemKontoblaetter = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.report.kontoblaetter"),
                    null);
            menueItemKontoblaetter.addActionListener(this);
            menueItemKontoblaetter.setActionCommand(MENU_ACTION_KONTOBLAETTER);
            menuInfo.add(menueItemKontoblaetter);
            wmbKonten.addJMenuItem(menuInfo);

            WrapperMenuItem menuItemOffenePosten = null;
            menuItemOffenePosten = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.report.offeneposten"), null);
            menuItemOffenePosten.addActionListener(this);
            menuItemOffenePosten.setActionCommand(MENU_ACTION_OFFENPOSTEN);
            menuInfo.add(menuItemOffenePosten);

            WrapperMenuItem menuItemAenderungenKonto = null;
            menuItemAenderungenKonto = new WrapperMenuItem(LPMain.getTextRespectUISPr("lp.report.aenderungen"),
                    null);
            menuItemAenderungenKonto.addActionListener(this);
            menuItemAenderungenKonto.setActionCommand(MENU_INFO_AENDERUNGEN_KONTO);
            menuInfo.add(menuItemAenderungenKonto);

        } else {
            if (LPMain.getInstance().getDesktop()
                    .darfAnwenderAufZusatzfunktionZugreifen(MandantFac.ZUSATZFUNKTION_LIQUIDITAETSVORSCHAU)) {
                // PJ16999
                WrapperMenuItem menuItemLiqu = null;
                menuItemLiqu = new WrapperMenuItem(LPMain.getTextRespectUISPr("fb.report.liquiditaetsvorschau"),
                        RechteFac.RECHT_FB_FINANZ_CUD);
                menuItemLiqu.addActionListener(this);
                menuItemLiqu.setActionCommand(MENU_ACTION_LIQUIDITAETSVORSCHAU);
                jmJournal.add(menuItemLiqu);
            }

        }
        ((InternalFrameFinanz) getInternalFrame()).wmbKonten = wmbKonten;
        return wmbKonten;
    }

    @Override
    public void setSelectedComponent(Component c) {
        // TODO Auto-generated method stub
        super.setSelectedComponent(c);
    }

    @Override
    public void setSelectedIndex(int index) {
        // TODO Auto-generated method stub
        super.setSelectedIndex(index);
    }

    protected void lPActionEvent(java.awt.event.ActionEvent e) throws Throwable {
        // if
        // (e.getActionCommand().equals(MENU_ACTION_DATEI_DRUCKEN_KONTOBLATT)) {
        // printKontoblatt();
        // } else
        String selectedGJMenuItem = geschaeftsjahrViewController.getSelectedGeschaeftsjahr(e.getActionCommand());
        if (null != selectedGJMenuItem) {
            if (panelQueryBuchungen != null) {
                panelQueryBuchungen.updateButtons();
                initPanelTop3QueryBuchungen();
                panelQueryBuchungen.setDefaultFilter(buildFiltersBuchungen());
                if (getInternalFrame().getSelectedTabbedPane() == this
                        && getSelectedComponent() == getPanelSplit3()) {
                    setSelectedComponent(getPanelSplit3());
                    getPanelSplit3().eventYouAreSelected(false);
                }
                geschaeftsjahrGesperrt = null;
                isGeschaeftsjahrGesperrt();
            }
        }

        // Map<?, ?> mapGJ = DelegateFactory.getInstance().getSystemDelegate()
        // .getAllGeschaeftsjahr();
        // for (Iterator<?> iter = mapGJ.keySet().iterator(); iter.hasNext();) {
        // Integer item = (Integer) iter.next();
        // if (e.getActionCommand().equals(
        // TabbedPaneKonten.MENU_ACTION_GESCHAEFTSJAHR_AENDERUNG
        // + item.toString())) {
        // ((InternalFrameFinanz)
        // getInternalFrame()).setAktuellesGeschaeftsjahr(item.toString());
        // LPMain.getInstance().getTheClient().setGeschaeftsJahr(item) ;
        // if (panelQueryBuchungen != null) {
        // panelQueryBuchungen.updateButtons();
        // initPanelTop3QueryBuchungen();
        // panelQueryBuchungen
        // .setDefaultFilter(buildFiltersBuchungen());
        // if (getSelectedComponent().equals(getPanelSplit3())) {
        // setSelectedComponent(getPanelSplit3());
        // getPanelSplit3().eventYouAreSelected(false);
        // }
        // }
        // }
        // }

        if (e.getActionCommand().equals(MENU_ACTION_BEARBEITEN_IMPORTKONTEN)) {
            importKonten();
        }
        if (e.getActionCommand().equals(MENU_ACTION_JOURNAL_KONTEN)
                || e.getActionCommand().equals(MENU_ACTION_JOURNAL_KONTEN_DEBI)
                || e.getActionCommand().equals(MENU_ACTION_JOURNAL_KONTEN_KREDI)) {
            printKonten();
        } else if (e.getActionCommand().equals(MENU_ACTION_SALDENLISTE)) {
            printSaldenliste();
        } else if (e.getActionCommand().equals(MENU_ACTION_ERFOLGSRECHNUNG)) {
            printErfolgsrechnung();
        } else if (e.getActionCommand().equals(MENU_ACTION_BILANZ)) {
            printBilanz();
        } else if (e.getActionCommand().equals(MENU_ACTION_LIQUIDITAETSVORSCHAU)) {
            getInternalFrame().showReportKriterien(new ReportLiquiditaetsvorschau(getInternalFrame(),
                    LPMain.getTextRespectUISPr("fb.report.liquiditaetsvorschau")));
        } else if (e.getActionCommand().equals(MENU_ACTION_BEARBEITEN_STORNIEREN)) {
            TabbedPaneKonten tbk = (TabbedPaneKonten) getInternalFrameFinanz().getSelectedTabbedPane();
            if (tbk != null) {
                PanelQuery pq = tbk.getPanelQueryBuchungen();
                if (pq != null && pq.getSelectedId() != null) {
                    BuchungdetailDto bDto = DelegateFactory.getInstance().getBuchenDelegate()
                            .buchungdetailFindByPrimaryKey((Integer) pq.getSelectedId());

                    DelegateFactory.getInstance().getBuchenDelegate().storniereBuchung(bDto.getBuchungIId());
                }
                tbk.getPanelSplit3().eventYouAreSelected(false);
            }
        } else if (e.getActionCommand().equals(MENU_ACTION_KONTOBLAETTER)) {
            getInternalFrame().showReportKriterien(new ReportKontoblaetter(getInternalFrameFinanz(), kontoDto,
                    LPMain.getTextRespectUISPr("fb.report.kontoblaetter")));
        } else if (e.getActionCommand().equals(MENU_ACTION_OFFENPOSTEN)) {
            getInternalFrame().showReportKriterien(new ReportOffenePosten(getInternalFrameFinanz(), kontoDto,
                    LPMain.getTextRespectUISPr("fb.report.offeneposten")));
        } else if (e.getActionCommand().equals(MENU_INFO_AENDERUNGEN_KONTO)) {
            getInternalFrame().showReportKriterien(new ReportAenderungenKonto(getInternalFrameFinanz(),
                    kontoDto.getIId(), LPMain.getTextRespectUISPr("lp.report.aenderungen")));
        } else if (e.getActionCommand().equals(MENU_ACTION_MANUELLE_BUCHUNG)) {
            // modmod: 1 hier wird das Panel fuer den Dialog an das IF
            // uebergeben
            PanelFinanzUmbuchung ub = getPanelUmbuchung();
            ub.setGeschaeftsjahr(getInternalFrameFinanz().getIAktuellesGeschaeftsjahr());
            getInternalFrame().showPanelDialog(ub);
        } else if (e.getActionCommand().equals(MENU_ACTION_FINANZAMTSBUCHUNGEN)) {
            finanzamtsbuchungen();
        } else if (e.getActionCommand().equals(MENU_ACTION_SPLITTBUCHUNG)) {
            PanelFinanzSplittbuchung sb = getPanelSplittbuchung();
            sb.setGeschaeftsjahr(getInternalFrameFinanz().getIAktuellesGeschaeftsjahr());
            getInternalFrame().showPanelDialog(sb);
        } else if (e.getActionCommand().equals(MENU_ACTION_UVA)) {
            printUva();
            // alle uva-menus updaten
            // updateUvaMenus(); wirkt hier nicht, da Dialog nicht modal!
        } else if (e.getActionCommand().equals(MENU_ACTION_USTVERPROBUNG)) {
            getInternalFrame().showReportKriterien(
                    new ReportUstVerprobung(getInternalFrame(), LPMain.getTextRespectUISPr("fb.menu.ustverprobung"),
                            ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr()));
        } else if (e.getActionCommand().startsWith(MENU_ACTION_UVA_ZURUECKNEHMEN)) {
            int i = e.getActionCommand().indexOf("|");
            i = Integer.parseInt(e.getActionCommand().substring(i + 1));
            FinanzamtDto finanzamtDto = finanzamtDtos[i];
            letzteUvaZuruecknehmen(finanzamtDto.getPartnerIId());
            // update Menutext auf aktuelle letzte Verprobung
            updateUvaMenu(i);
        } else if (e.getActionCommand().equals(MENU_ACTION_BEARBEITEN_BELEGUEBERNAHME)) {
            belegUebernahme();
        } else if (e.getActionCommand().equals(MENU_ACTION_BEARBEITEN_PERIODENUEBERNAHME)) {
            periodenUebernahme();
        } else if (e.getActionCommand().equals(MENU_ACTION_GESCHAEFTSJAHR_SPERRE)) {
            String sMeldung = LPMain.getMessageTextRespectUISPr("fb.frage.geschaeftsjahrsperre1",
                    new Object[] { getInternalFrameFinanz().getIAktuellesGeschaeftsjahr() });
            // String sMeldung = LPMain
            // .getTextRespectUISPr("fb.frage.geschaeftsjahrsperre1");
            if (DialogFactory.showModalJaNeinDialog(getInternalFrame(), sMeldung)) {
                sMeldung = LPMain.getTextRespectUISPr("fb.frage.geschaeftsjahrsperre2");
                if (DialogFactory.showModalJaNeinDialog(getInternalFrame(), sMeldung))
                    DelegateFactory.getInstance().getSystemDelegate()
                            .sperreGeschaeftsjahr(getInternalFrameFinanz().getIAktuellesGeschaeftsjahr());
            }
        }
    }

    protected void updateUvaMenus() throws ExceptionLP, Throwable {
        for (int i = 0; i < finanzamtDtos.length; i++) {
            updateUvaMenu(i);
        }
    }

    private void updateUvaMenu(int index) throws ExceptionLP, Throwable {
        UvaverprobungDto uvavp = DelegateFactory.getInstance().getFinanzServiceDelegate()
                .letzteVerprobung(finanzamtDtos[index].getPartnerIId());
        if (uvavp == null) {
            menuItemUVAZuruecknehmenFa[index]
                    .setText(finanzamtDtos[index].getPartnerDto().formatName() + " (KEINE)");
            menuItemUVAZuruecknehmenFa[index].setEnabled(false);
        } else {
            menuItemUVAZuruecknehmenFa[index]
                    .setText(finanzamtDtos[index].getPartnerDto().formatName() + " (" + uvavp.toInfo() + ")");
            menuItemUVAZuruecknehmenFa[index].setEnabled(true);
        }
    }

    private InternalFrameFinanz getInternalFrameFinanz() {
        return (InternalFrameFinanz) getInternalFrame();
    }

    private void importKonten() {
        File[] files = HelperClient.chooseFile(this, HelperClient.FILE_FILTER_CSV, false);
        if (files == null || files.length < 1)
            return;

        try {
            csvKontoImportController.setImportFile(files[0]);
            // List<ExceptionLP> errors =
            // csvKontoImportController.importCsvFile(files[0]) ;

            DialogCsvResult dlg = new DialogCsvResult(LPMain.getInstance().getDesktop(),
                    "Sachkontenimport Ergebnis", true, csvKontoImportController);
            dlg.setVisible(true);
        } catch (IOException ioE) {
            handleException(ioE, false);
        } catch (Throwable t) {
            handleException(t, false);
        }
    }

    private void letzteUvaZuruecknehmen(Integer finanzamtIId) throws ExceptionLP, Throwable {
        if (finanzamtIId == null) {
            DialogFactory.showModalDialog("UVA Verprobung", "Kein Finanzamt f\u00FCr Mandant definiert");
        } else {
            UvaverprobungDto uvapDto = DelegateFactory.getInstance().getFinanzServiceDelegate()
                    .letzteVerprobung(finanzamtIId);
            if (uvapDto != null) {
                String sMeldung = "UVa Verprobung f\u00FCr Gesch\u00E4ftsjahr " + uvapDto.getIGeschaeftsjahr();
                if (uvapDto.getIAbrechnungszeitraum() == UvaverprobungDto.UVAABRECHNUNGSZEITRAUM_JAHR)
                    sMeldung += " Monat " + uvapDto.getIMonat() + " zur\u00FCcknehmen";
                else if (uvapDto.getIAbrechnungszeitraum() == UvaverprobungDto.UVAABRECHNUNGSZEITRAUM_QUARTAL)
                    sMeldung += " Quartal " + uvapDto.getIMonat() + " zur\u00FCcknehmen";
                else
                    sMeldung += " zur\u00FCcknehmen";

                if (DialogFactory.showModalJaNeinDialog(this.getInternalFrame(), sMeldung)) {
                    DelegateFactory.getInstance().getFinanzServiceDelegate().removeUvaverprobung(uvapDto);
                }
            } else {
                DialogFactory.showModalDialog("Uva Verprobung",
                        "Es ist keine Verprobung f\u00FCr das gew\u00E4hlte Finanzamt vorhanden.");
            }

        }
    }

    protected void belegUebernahme() throws Throwable {
        Integer geschaeftsjahr = ((InternalFrameFinanz) getInternalFrame()).getIAktuellesGeschaeftsjahr();
        GeschaeftsjahrMandantDto gjDto = DelegateFactory.getInstance().getSystemDelegate()
                .geschaeftsjahrFindByPrimaryKey(geschaeftsjahr);
        int[] ret = DialogFactory.showPeriodeAuswahl(gjDto);
        int periode = ret[0];
        boolean alleneu = (ret[1] == 1 ? true : false);
        if (periode > 0) {
            ArrayList<FibuFehlerDto> fehler = DelegateFactory.getInstance().getFinanzServiceDelegate()
                    .pruefeBelege(geschaeftsjahr, periode, false);
            if (fehler.size() == 0) {
                // nur verbuchen wenn keine Fehler festgestellt!
                DelegateFactory.getInstance().getFinanzServiceDelegate().verbucheBelege(geschaeftsjahr, periode,
                        alleneu);
                JOptionPane.showMessageDialog(this, "Belege f\u00FCr Periode " + periode + " wurden verbucht.",
                        "Info", JOptionPane.OK_OPTION);
            } else {
                DialogFactory.showBelegPruefergebnis(getInternalFrame(), fehler);
            }
        }
    }

    protected void periodenUebernahme() throws Throwable {
        TabbedPaneKonten selectedPane = (TabbedPaneKonten) getInternalFrameFinanz().getSelectedTabbedPane();
        if (selectedPane == null)
            return;

        Integer gj = getInternalFrameFinanz().getIAktuellesGeschaeftsjahr();
        String gjFrom = gj == null ? "" : (new Integer(gj.intValue() - 1)).toString();
        String gjTo = gj == null ? "" : gj.toString();

        DialogPeriodenuebernahme d = new DialogPeriodenuebernahme(LPMain.getInstance().getDesktop(), LPMain
                .getMessageTextRespectUISPr("finanz.periodenuebernahme.dialog", new Object[] { gjFrom, gjTo }),
                selectedPane.getKontoDto(), gj);
        LPMain.getInstance().getDesktop().platziereDialogInDerMitteDesFensters(d);
        d.setVisible(true);
    }

    protected void finanzamtsbuchungen() throws Throwable {
        // TODO: periode setzen
        int periode = 1;
        Integer geschaeftsjahr = ((InternalFrameFinanz) getInternalFrame()).getIAktuellesGeschaeftsjahr();
        DelegateFactory.getInstance().getFinanzServiceDelegate().createFinanzamtsbuchungen(geschaeftsjahr, periode);
    }

    protected void printKonten() throws Throwable {
        String sTitle = DelegateFactory.getInstance().getFinanzServiceDelegate()
                .uebersetzeKontotypOptimal(this.kontotyp);
        getInternalFrame().showReportKriterien(new ReportKonten(getInternalFrame(), "Kontos", sTitle));
    }

    private void printSaldenliste() throws Throwable {
        getInternalFrame().showReportKriterien(
                new ReportSaldenliste(getInternalFrame(), LPMain.getTextRespectUISPr("fb.menu.saldenliste"),
                        ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr()));
    }

    private void printErfolgsrechnung() throws Throwable {
        getInternalFrame().showReportKriterien(
                new ReportErfolgsrechnung(getInternalFrame(), LPMain.getTextRespectUISPr("fb.menu.erfolgsrechnung"),
                        ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr()));
    }

    private void printBilanz() throws Throwable {
        getInternalFrame().showReportKriterien(
                new ReportBilanz(getInternalFrame(), LPMain.getTextRespectUISPr("fb.menu.bilanz"),
                        ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr()));
    }

    private void printUva() throws Throwable {
        getInternalFrame()
                .showReportKriterien(new ReportUva(getInternalFrame(), LPMain.getTextRespectUISPr("fb.menu.uva"),
                        ((InternalFrameFinanz) getInternalFrame()).getAktuellesGeschaeftsjahr(), this));
    }

    protected PanelFinanzUmbuchung getPanelUmbuchung() throws Throwable {
        if (panelUmbuchung == null) {
            panelUmbuchung = new PanelFinanzUmbuchung(getInternalFrame());
        }

        panelUmbuchung.reset();
        return panelUmbuchung;
    }

    protected PanelFinanzSplittbuchung getPanelSplittbuchung() throws Throwable {
        if (panelSplittbuchung == null) {
            panelSplittbuchung = new PanelFinanzSplittbuchung(getInternalFrame());
        }

        panelSplittbuchung.reset();
        return panelSplittbuchung;
    }

    public Object getDto() {
        return kontoDto;
    }

}