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

Source Code of de.willuhn.jameica.hbci.gui.controller.UeberweisungControl$Typ

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/gui/controller/UeberweisungControl.java,v $
* $Revision: 1.57 $
* $Date: 2012/02/26 13:00:39 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.hbci.gui.controller;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

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

import de.willuhn.jameica.gui.AbstractView;
import de.willuhn.jameica.gui.GUI;
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.HBCIProperties;
import de.willuhn.jameica.hbci.Settings;
import de.willuhn.jameica.hbci.TextSchluessel;
import de.willuhn.jameica.hbci.gui.action.UeberweisungNew;
import de.willuhn.jameica.hbci.gui.input.TerminInput;
import de.willuhn.jameica.hbci.gui.parts.UeberweisungList;
import de.willuhn.jameica.hbci.rmi.BaseUeberweisung;
import de.willuhn.jameica.hbci.rmi.HibiscusTransfer;
import de.willuhn.jameica.hbci.rmi.Terminable;
import de.willuhn.jameica.hbci.rmi.Ueberweisung;
import de.willuhn.jameica.system.Application;
import de.willuhn.jameica.util.DateUtil;
import de.willuhn.logging.Logger;

/**
* Controller fuer die Ueberweisungen.
*/
public class UeberweisungControl extends AbstractBaseUeberweisungControl
{

  private UeberweisungList table     = null;
  private Ueberweisung transfer      = null;
  private SelectInput typ            = null;
  private SelectInput textschluessel = null;
  private TerminInput termin         = null;

  /**
   * ct.
   * @param view
   */
  public UeberweisungControl(AbstractView view)
  {
    super(view);
  }

  /**
   * Ueberschrieben, damit wir bei Bedarf eine neue Ueberweisung erzeugen koennen.
   * @see de.willuhn.jameica.hbci.gui.controller.AbstractTransferControl#getTransfer()
   */
  public HibiscusTransfer getTransfer() throws RemoteException
  {
    if (transfer != null)
      return transfer;

    transfer = (Ueberweisung) getCurrentObject();
    if (transfer != null)
      return transfer;
     
    transfer = (Ueberweisung) Settings.getDBService().createObject(Ueberweisung.class,null);
    return transfer;
  }

  /**
   * Liefert eine Combobox zur Auswahl des Auftragstyps.
   * Zur Wahl stehen Ueberweisung, Termin-Ueberweisung und Umbuchung.
   * @return die Combobox.
   * @throws RemoteException
   */
  public SelectInput getTyp() throws RemoteException
  {
    if (this.typ != null)
      return this.typ;
    final Ueberweisung u = (Ueberweisung) getTransfer();
   
    List<Typ> list = new ArrayList<Typ>();
    list.add(new Typ(false,false));
    list.add(new Typ(true,false));
    list.add(new Typ(false,true));
    // TODO: Bei BZU- oder Spenden-Ueberweisung muss die Box deaktiviert werden und beide Flags duerfen nicht gesetzt sein
    this.typ = new SelectInput(list,new Typ(u.isTerminUeberweisung(),u.isUmbuchung()));
    this.typ.setName(i18n.tr("Auftragstyp"));
    this.typ.setAttribute("name");
    this.typ.setEnabled(!u.ausgefuehrt());
    this.typ.addListener(new Listener() {
      public void handleEvent(Event event)
      {
        // Wir muessen die Entscheidung, ob es eine Termin-Ueberweisung ist,
        // sofort im Objekt speichern, denn die Information wird von
        // "getTermin()" gebraucht, um zu erkennen, ob der Auftrag faellig ist
        try
        {
          Typ t = (Typ) getTyp().getValue();
          u.setTerminUeberweisung(t.termin);

          // Kommentar vom Termin-Eingabefeld aktualisieren.
          getTermin().updateComment();
        }
        catch (Exception e)
        {
          Logger.error("unable to set flag",e);
        }
      }
    });
    return this.typ;
  }
 
 
  /**
   * @see de.willuhn.jameica.hbci.gui.controller.AbstractBaseUeberweisungControl#getTermin()
   */
  public TerminInput getTermin() throws RemoteException
  {
    if (this.termin != null)
      return this.termin;
   
    this.termin = super.getTermin();
    this.termin.addListener(new Listener() {
      public void handleEvent(Event event)
      {
        try
        {
          if (!termin.hasChanged())
            return;
         
          Date date = (Date) termin.getValue();
          if (date == null)
            return;
         
          // Wenn das Datum eine Woche in der Zukunft liegt, fragen wir den User, ob es vielleicht
          // eine Terminueberweisung werden soll. Muessen wir aber nicht fragen, wenn
          // der User nicht ohnehin schon eine Termin-Ueberweisung ausgewaehlt hat
          Typ typ = (Typ) getTyp().getValue();
          if (typ == null || typ.termin)
            return;

          Calendar cal = Calendar.getInstance();
          cal.setTime(DateUtil.startOfDay(new Date()));
          cal.add(Calendar.DATE,6);
          if (DateUtil.startOfDay(date).after(cal.getTime()))
          {
            String q = i18n.tr("Soll der Auftrag als bankseitig gef�hrte Termin-�berweisung ausgef�hrt werden?");
            if (Application.getCallback().askUser(q))
              getTyp().setValue(new Typ(true,false));
          }
        }
        catch (Exception e)
        {
          Logger.error("unable to check for termueb",e);
        }
       
      }
    });
   
    return this.termin;
  }

  /**
   * Liefert eine Tabelle mit allen vorhandenen Ueberweisungen.
   * @return Tabelle.
   * @throws RemoteException
   */
  public UeberweisungList getUeberweisungListe() throws RemoteException
  {
    if (table != null)
      return table;

    table = new de.willuhn.jameica.hbci.gui.parts.UeberweisungList(new UeberweisungNew());
    return table;
  }
 
  /**
   * @see de.willuhn.jameica.hbci.gui.controller.AbstractBaseUeberweisungControl#getTextSchluessel()
   */
  public Input getTextSchluessel() throws RemoteException
  {
    if (textschluessel != null)
      return textschluessel;

    String current = ((BaseUeberweisung)getTransfer()).getTextSchluessel();
    textschluessel = new SelectInput(TextSchluessel.get(TextSchluessel.SET_UEB),TextSchluessel.get(current));
    textschluessel.setName(i18n.tr("Textschl�ssel"));
    textschluessel.setEnabled(!((Terminable)getTransfer()).ausgefuehrt());

    ////////////////////////////////////////////////////////////////////////////
    // BZ� und Spenden-Ueberweisung

    // initiales Setzen der Einstellungen
    updateZweck(current);
   
    // Listener fuer die nachtraegliche Aenderung
    if (textschluessel.isEnabled())
    {
      textschluessel.addListener(new Listener() {
        public void handleEvent(Event event)
        {
          TextSchluessel s = (TextSchluessel) textschluessel.getValue();
          updateZweck(s != null ? s.getCode() : null);
        }
      });
    }
    //
    ////////////////////////////////////////////////////////////////////////////
   
    return textschluessel;
  }
 
  /**
   * Aktualisiert die Eingabefelder fuer den Verwendungszweck abhaengig vom Textschluessel.
   * @param code der Code.
   */
  private void updateZweck(String code)
  {
    try
    {
      TextInput zweck = getZweck();
     
      if (code != null && code.equals(TextSchluessel.TS_BZU))
      {
        zweck.setName(i18n.tr("BZ�-Pr�fziffer"));
        zweck.setMaxLength(HBCIProperties.HBCI_TRANSFER_BZU_LENGTH);
        zweck.setValidChars(HBCIProperties.HBCI_BZU_VALIDCHARS);
      }
      else if (code != null && code.equals(TextSchluessel.TS_SPENDE))
      {
        // TODO: Eingabefelder fuer die Spenden-Ueberweisung fehlen noch
      }
      else
      {
        zweck.setName(i18n.tr("Verwendungszweck"));
        zweck.setMaxLength(HBCIProperties.HBCI_TRANSFER_USAGE_MAXLENGTH);
        zweck.setValidChars(HBCIProperties.HBCI_DTAUS_VALIDCHARS);
      }
    }
    catch (Exception e)
    {
      Logger.error("unable to apply changes",e);
    }
  }
 
  /**
   * Ueberschrieben, um das Flag fuer die Termin-Ueberweisung zu speichern.
   * @see de.willuhn.jameica.hbci.gui.controller.AbstractTransferControl#handleStore()
   */
  public synchronized boolean handleStore()
  {
    try
    {
      Ueberweisung u = (Ueberweisung) getTransfer();
      if (u.ausgefuehrt()) // BUGZILLA 1197
        return true;
     
      Typ t = (Typ) getTyp().getValue();
      u.setTerminUeberweisung(t.termin);
      u.setUmbuchung(t.umb);
      return super.handleStore();
    }
    catch (RemoteException re)
    {
      Logger.error("error while storing ueberweisung",re);
      GUI.getStatusBar().setErrorText(i18n.tr("Fehler beim Speichern der �berweisung"));
      return false;
    }
  }
 
  /**
   * Hilfsklasse fuer den Auftragstyp.
   */
  public class Typ
  {
    private boolean termin = false;
    private boolean umb    = false;
   
    /**
     * ct.
     * @param termin true bei Termin-Ueberweisung.
     * @param umb true bei Umbuchung.
     */
    private Typ(boolean termin, boolean umb)
    {
      this.termin = termin;
      this.umb    = umb;
    }
   
    /**
     * Liefert den sprechenden Namen des Typs.
     * @return sprechender Name des Typs.
     */
    public String getName()
    {
      if (this.termin) return i18n.tr("Termin-�berweisung");
      if (this.umb)    return i18n.tr("Interne Umbuchung (�bertrag)");
      return           i18n.tr("�berweisung");
    }
   
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(Object o)
    {
      if (o == null || !(o instanceof Typ))
        return false;
      Typ other = (Typ) o;
      return other.termin == this.termin &&
             other.umb == this.umb;
    }
  }
}


/**********************************************************************
* $Log: UeberweisungControl.java,v $
* Revision 1.57  2012/02/26 13:00:39  willuhn
* @B BUGZILLA 1197
*
* Revision 1.56  2011/10/24 09:46:16  willuhn
* @N Termin-Ueberweisung erst vorschlagen, wenn der Termin 1 Woche in der Zukunft liegt
*
* Revision 1.55  2011/10/18 14:40:31  willuhn
* @N Wenn ein Termin in der Zukunft ausgewaehlt wird, erscheint jetzt eine Sicherheitsabfrage, mit der der User darauf hingewiesen wird, den Auftrag ggf. als bankseitig gefuehrte Termin-Ueberweisung einzureichen
*
* Revision 1.54  2011/05/20 16:22:31  willuhn
* @N Termin-Eingabefeld in eigene Klasse ausgelagert (verhindert duplizierten Code) - bessere Kommentare
*
* Revision 1.53  2011-05-13 07:40:11  willuhn
* *** empty log message ***
*
* Revision 1.52  2011-05-12 08:08:27  willuhn
* @N BUGZILLA 591
*
* Revision 1.51  2011-05-11 16:23:57  willuhn
* @N BUGZILLA 591
*
* Revision 1.50  2011-05-10 12:17:07  willuhn
* *** empty log message ***
*
* Revision 1.49  2011-05-10 11:41:30  willuhn
* @N Text-Schluessel als Konstanten definiert - Teil aus dem Patch von Thomas vom 07.12.2010
*
* Revision 1.48  2011-04-08 17:41:45  willuhn
* @N Erster Druck-Support fuer Ueberweisungslisten
*
* Revision 1.47  2010-08-17 11:32:10  willuhn
* @C Code-Cleanup
*
* Revision 1.46  2010-06-07 12:43:41  willuhn
* @N BUGZILLA 587
*
* Revision 1.45  2009/05/12 22:53:33  willuhn
* @N BUGZILLA 189 - Ueberweisung als Umbuchung
**********************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.gui.controller.UeberweisungControl$Typ

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.