Package de.willuhn.jameica.hbci.gui.controller

Source Code of de.willuhn.jameica.hbci.gui.controller.AbstractSammelTransferBuchungControl$GegenkontoListener

/*****************************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/gui/controller/AbstractSammelTransferBuchungControl.java,v $
* $Revision: 1.19 $
* $Date: 2010/03/10 22:14:12 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
****************************************************************************/
package de.willuhn.jameica.hbci.gui.controller;

import java.rmi.RemoteException;

import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.jameica.gui.AbstractControl;
import de.willuhn.jameica.gui.AbstractView;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.jameica.gui.input.CheckboxInput;
import de.willuhn.jameica.gui.input.DecimalInput;
import de.willuhn.jameica.gui.input.DialogInput;
import de.willuhn.jameica.gui.input.Input;
import de.willuhn.jameica.gui.input.SelectInput;
import de.willuhn.jameica.gui.input.TextInput;
import de.willuhn.jameica.hbci.HBCI;
import de.willuhn.jameica.hbci.HBCIProperties;
import de.willuhn.jameica.hbci.gui.dialogs.VerwendungszweckDialog;
import de.willuhn.jameica.hbci.gui.filter.AddressFilter;
import de.willuhn.jameica.hbci.gui.input.AddressInput;
import de.willuhn.jameica.hbci.gui.input.BLZInput;
import de.willuhn.jameica.hbci.rmi.Address;
import de.willuhn.jameica.hbci.rmi.SammelTransferBuchung;
import de.willuhn.jameica.messaging.StatusBarMessage;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.I18N;

/**
* Abstrakter Controller fuer die Dialoge "Buchung einer Sammellastschrift/-ueberweisung bearbeiten".
* @author willuhn
*/
public abstract class AbstractSammelTransferBuchungControl extends AbstractControl
{

  // Fach-Objekte
  private Address gegenKonto         = null;
 
  // Eingabe-Felder
  private Input betrag               = null;
  private TextInput zweck            = null;
  private DialogInput zweck2         = null;
  VerwendungszweckDialog zweckDialog = null;

  private AddressInput gkName        = null;
  private TextInput gkNummer          = null;
  private TextInput gkBLZ             = null;

  private CheckboxInput storeAddress = null;

  private I18N i18n                  = null;

  /**
   * ct.
   * @param view
   */
  public AbstractSammelTransferBuchungControl(AbstractView view)
  {
    super(view);
    i18n = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();
  }

  /**
   * Liefert die aktuelle Buchung.
   * @return die Buchung.
   */
  public abstract SammelTransferBuchung getBuchung();

  /**
   * Liefert das Eingabe-Feld fuer den Namen des Kontoinhabers des Gegenkontos.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public AddressInput getGegenkontoName() throws RemoteException
  {
    if (gkName != null)
      return gkName;
    gkName = new AddressInput(getBuchung().getGegenkontoName(),AddressFilter.INLAND);
    gkName.setMandatory(true);
    gkName.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());
    gkName.addListener(new GegenkontoListener());
    return gkName;
  }


  /**
   * Liefert das Eingabe-Feld fuer das Gegenkonto.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public TextInput getGegenKonto() throws RemoteException
  {
    if (gkNummer != null)
      return gkNummer;

    gkNummer = new TextInput(getBuchung().getGegenkontoNummer(),HBCIProperties.HBCI_KTO_MAXLENGTH_SOFT);
    gkNummer.setValidChars(HBCIProperties.HBCI_KTO_VALIDCHARS + " ");
    gkNummer.setMandatory(true);
    gkNummer.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());
    gkNummer.addListener(new Listener()
    {
      public void handleEvent(Event event)
      {
        String s = (String)gkNummer.getValue();
        if (s == null || s.length() == 0 || s.indexOf(" ") == -1)
          return;
        gkNummer.setValue(s.replaceAll(" ",""));
      }
    });
    return gkNummer;
  }

  /**
   * Liefert das Eingabe-Feld fuer die BLZ.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public Input getGegenkontoBLZ() throws RemoteException
  {
    if (gkBLZ != null)
      return gkBLZ;
    gkBLZ = new BLZInput(getBuchung().getGegenkontoBLZ());
    gkBLZ.setMandatory(true);
    gkBLZ.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());
    return gkBLZ;
  }

  /**
   * Liefert das Eingabe-Feld fuer den Verwendungszweck.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public Input getZweck() throws RemoteException
  {
    if (zweck != null)
      return zweck;
    zweck = new TextInput(getBuchung().getZweck(),HBCIProperties.HBCI_TRANSFER_USAGE_MAXLENGTH);
    zweck.setValidChars(HBCIProperties.HBCI_DTAUS_VALIDCHARS);
    zweck.setMandatory(true);
    zweck.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());
    return zweck;
  }

   /**
   * Liefert das Eingabe-Feld fuer den "weiteren" Verwendungszweck.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public DialogInput getZweck2() throws RemoteException
  {
    if (zweck2 != null)
      return zweck2;
    final String buttonText = "weitere Zeilen ({0})...";
    this.zweckDialog = new VerwendungszweckDialog(getBuchung(),VerwendungszweckDialog.POSITION_MOUSE);
    this.zweckDialog.addCloseListener(new Listener() {
      public void handleEvent(Event event)
      {
        try
        {
          String[] newLines = (String[]) zweckDialog.getData();
          if (newLines != null) // andernfalls wurde "Abbrechen" gedrueckt
            zweck2.setButtonText(i18n.tr(buttonText,String.valueOf(newLines.length)));
        }
        catch (Exception e)
        {
          Logger.error("unable to update line count",e);
          Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Aktualisieren der Zeilen-Anzahl"), StatusBarMessage.TYPE_ERROR));
        }
      }
   
    });
    zweck2 = new DialogInput(getBuchung().getZweck2(),this.zweckDialog);
    zweck2.setButtonText(i18n.tr(buttonText,String.valueOf(getBuchung().getWeitereVerwendungszwecke().length)));
    zweck2.setMaxLength(HBCIProperties.HBCI_TRANSFER_USAGE_MAXLENGTH);
    zweck2.setValidChars(HBCIProperties.HBCI_DTAUS_VALIDCHARS);
    if (getBuchung().getSammelTransfer().ausgefuehrt())
      zweck2.disableClientControl();
    return zweck2;
  }
 


  /**
   * Liefert das Eingabe-Feld fuer den Betrag.
   * @return Eingabe-Feld.
   * @throws RemoteException
   */
  public Input getBetrag() throws RemoteException
  {
    if (betrag != null)
      return betrag;
   
    SammelTransferBuchung b = getBuchung();
    double d = b.getBetrag();
    if (d == 0.0d) d = Double.NaN;

    betrag = new DecimalInput(d,HBCI.DECIMALFORMAT);
    betrag.setMandatory(true);
    betrag.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());

    // wir loesen den KontoListener aus, um die Waehrung sofort anzuzeigen
   
    try
    {
      String curr = getBuchung().getSammelTransfer().getKonto().getWaehrung();
      if (curr != null)
        betrag.setComment(curr);
    }
    catch (Exception e)
    {
      Logger.error("error while reading currency name",e);
    }
    return betrag;
  }
 
  /**
   * Liefert ein Auswahlfeld fuer den Textschluessel.
   * @return Auswahlfeld.
   * @throws RemoteException
   */
  public abstract SelectInput getTextSchluessel() throws RemoteException;

  /**
   * Liefert eine CheckBox ueber die ausgewaehlt werden kann,
   * ob die Adresse (Gegenkonto) mitgespeichert werden soll.
   * @return CheckBox.
   * @throws RemoteException
   */
  public CheckboxInput getStoreAddress() throws RemoteException
  {
    if (storeAddress != null)
      return storeAddress;

    // Nur bei neuen Buchungen aktivieren
    storeAddress = new CheckboxInput(getBuchung().isNewObject());
    storeAddress.setEnabled(!getBuchung().getSammelTransfer().ausgefuehrt());

    return storeAddress;
  }

  /**
   * Speichert den Geld-Transfer.
   * @param next legt fest, ob nach dem Speichern gleich zur naechsten Buchung gesprungen werden soll.
   */
  public abstract void handleStore(boolean next);

  /**
   * Listener, der bei Auswahl des Gegenkontos die restlichen Daten vervollstaendigt.
   */
  private class GegenkontoListener implements Listener
  {

    /**
     * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
     */
    public void handleEvent(Event event) {
      if (event == null)
        return;
      gegenKonto = (Address) event.data;
      if (gegenKonto == null)
        return;
      try {
        getGegenKonto().setValue(gegenKonto.getKontonummer());
        getGegenkontoBLZ().setValue(gegenKonto.getBlz());
        getGegenkontoName().setText(gegenKonto.getName());
        // Wenn die Adresse aus dem Adressbuch kommt, deaktivieren wir die Checkbox
        getStoreAddress().setValue(Boolean.FALSE);
       
        // BUGZILLA 408
        // Verwendungszweck automatisch vervollstaendigen
        try
        {
          String zweck = (String) getZweck().getValue();
          String zweck2 = (String) getZweck2().getText();
          if ((zweck != null && zweck.length() > 0) || (zweck2 != null && zweck2.length() > 0))
            return;
         
          DBIterator list = getBuchung().getList();
          list.addFilter("gegenkonto_nr = ?",new Object[]{gegenKonto.getKontonummer()});
          list.addFilter("gegenkonto_blz = ?"new Object[]{gegenKonto.getBlz()});
          list.setOrder("order by id desc");
          if (list.hasNext())
          {
            SammelTransferBuchung t = (SammelTransferBuchung) list.next();
            getZweck().setValue(t.getZweck());
            getZweck2().setText(t.getZweck2());
          }
        }
        catch (Exception e)
        {
          Logger.error("unable to autocomplete subject",e);
        }

      }
      catch (RemoteException er)
      {
        Logger.error("error while choosing address",er);
        GUI.getStatusBar().setErrorText(i18n.tr("Fehler bei der Auswahl der Adresse"));
      }
    }
  }

}

/*****************************************************************************
* $Log: AbstractSammelTransferBuchungControl.java,v $
* Revision 1.19  2010/03/10 22:14:12  willuhn
* @B Die erweiterten Verwendungszwecke waren nicht mehr erreichbar, wenn der Sammelauftrag ausgefuehrt war - sie Tom's Mail vom 10.03.2010
*
* Revision 1.18  2009/10/20 23:12:58  willuhn
* @N Support fuer SEPA-Ueberweisungen
* @N Konten um IBAN und BIC erweitert
*
* Revision 1.17  2009/03/13 00:25:12  willuhn
* @N Code fuer Auslandsueberweisungen fast fertig
*
* Revision 1.16  2009/02/24 23:51:01  willuhn
* @N Auswahl der Empfaenger/Zahlungspflichtigen jetzt ueber Auto-Suggest-Felder
*
* Revision 1.15  2008/12/04 23:20:37  willuhn
* @N BUGZILLA 310
*
* Revision 1.14  2008/12/01 23:54:42  willuhn
* @N BUGZILLA 188 Erweiterte Verwendungszwecke in Exports/Imports und Sammelauftraegen
*
* Revision 1.13  2008/11/17 23:30:00  willuhn
* @C Aufrufe der depeicated BLZ-Funktionen angepasst
*
* Revision 1.12  2008/10/27 09:23:38  willuhn
* @B Beim Duplizieren wurde der Betrag nicht uebernommen
*
* Revision 1.11  2008/10/15 21:40:32  willuhn
* @N BUGZILLA 448
*
* Revision 1.10  2008/08/01 11:05:14  willuhn
* @N BUGZILLA 587
*
* Revision 1.9  2008/05/19 22:35:53  willuhn
* @N Maximale Laenge von Kontonummern konfigurierbar (Soft- und Hardlimit)
* @N Laengenpruefungen der Kontonummer in Dialogen und Fachobjekten
*
* Revision 1.8  2007/11/01 22:04:24  willuhn
* @N Bugzilla 408
*
* Revision 1.7  2007/04/23 18:07:15  willuhn
* @C Redesign: "Adresse" nach "HibiscusAddress" umbenannt
* @C Redesign: "Transfer" nach "HibiscusTransfer" umbenannt
* @C Redesign: Neues Interface "Transfer", welches von Ueberweisungen, Lastschriften UND Umsaetzen implementiert wird
* @N Anbindung externer Adressbuecher
*
* Revision 1.6  2007/04/09 22:45:12  willuhn
* @N Bug 380
*
* Revision 1.5  2006/12/28 15:38:43  willuhn
* @N Farbige Pflichtfelder
*
* Revision 1.4  2006/10/06 16:00:42  willuhn
* @B Bug 280
*
* Revision 1.3  2006/03/27 16:46:21  willuhn
* @N GUI polish
*
* Revision 1.2  2006/02/06 16:03:50  willuhn
* @B bug 163
*
* Revision 1.1  2005/09/30 00:08:51  willuhn
* @N SammelUeberweisungen (merged with SammelLastschrift)
*
*****************************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.gui.controller.AbstractSammelTransferBuchungControl$GegenkontoListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.