Package de.willuhn.jameica.hbci.gui.dialogs

Source Code of de.willuhn.jameica.hbci.gui.dialogs.TransferMergeDialog

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/gui/dialogs/TransferMergeDialog.java,v $
* $Revision: 1.3 $
* $Date: 2011/10/24 14:13:50 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.hbci.gui.dialogs;

import java.rmi.RemoteException;
import java.util.Date;

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

import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.jameica.gui.Action;
import de.willuhn.jameica.gui.dialogs.AbstractDialog;
import de.willuhn.jameica.gui.input.CheckboxInput;
import de.willuhn.jameica.gui.input.LabelInput;
import de.willuhn.jameica.gui.input.SelectInput;
import de.willuhn.jameica.gui.input.TextInput;
import de.willuhn.jameica.gui.parts.ButtonArea;
import de.willuhn.jameica.gui.util.Color;
import de.willuhn.jameica.gui.util.SimpleContainer;
import de.willuhn.jameica.hbci.HBCI;
import de.willuhn.jameica.hbci.Settings;
import de.willuhn.jameica.hbci.gui.filter.KontoFilter;
import de.willuhn.jameica.hbci.gui.input.KontoInput;
import de.willuhn.jameica.hbci.rmi.HBCIDBService;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.hbci.rmi.SammelTransfer;
import de.willuhn.jameica.system.Application;
import de.willuhn.jameica.system.OperationCanceledException;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.I18N;

/**
* Oeffnet einen Dialog, mit dem mehrere Einzelauftraege zu einem
* Sammelauftrag zusammengefasst werden koennen. Der Dialog fragt
* hierzu noch das Konto ab, ueber den der Sammeltransfer abgewickelt
* werden soll sowie eine Bezeichnung. Beide Felder sind mit sinnvollen
* Default-Werten belegt. Alternativ kann auch ein existierender
* Sammel-Auftrag ausgewaehlt werden, dem die Auftraege zugeordnet
* werden sollen.
* Rueckgabewert des Dialogs ist der Sammel-Auftrag. Entweder
* der uebergebene (erweitert um Konto und Bezeichnung) oder der
* existierende und vom User ausgewaehlte.
*/
public class TransferMergeDialog extends AbstractDialog
{

  private final static I18N i18n    = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();
  private SammelTransfer transfer   = null;
  private Boolean delete            = Boolean.FALSE;

  private CheckboxInput useExisting = null;
  private SelectInput existing      = null;

  private KontoInput konto          = null;
  private TextInput bezeichnung     = null;

  /**
   * ct.
   * @param t der zugehoerige Sammel-Auftrag.
   * @param position
   */
  public TransferMergeDialog(SammelTransfer t, int position) {
    super(position);

    this.transfer = t;
    this.setTitle(i18n.tr("Auftr�ge zusammenf�hren"));
    this.setSize(550,SWT.DEFAULT);
  }

  /**
   * @see de.willuhn.jameica.gui.dialogs.AbstractDialog#getData()
   */
  protected Object getData() throws Exception {
    return this.transfer;
  }

  /**
   * @see de.willuhn.jameica.gui.dialogs.AbstractDialog#paint(org.eclipse.swt.widgets.Composite)
   */
  protected void paint(Composite parent) throws Exception
  {

    if (this.transfer.ausgefuehrt())
      throw new ApplicationException(i18n.tr("Der Auftrag wurde bereits ausgef�hrt"));

    SimpleContainer container = new SimpleContainer(parent);

    container.addInput(this.getUseExisting());
    container.addInput(this.getExistingList());
    container.addSeparator();
    container.addInput(this.getKonto());
    container.addInput(this.getBezeichnung());

    final CheckboxInput delBox = new CheckboxInput(this.delete.booleanValue());
    container.addCheckbox(delBox,i18n.tr("Einzelauftr�ge nach �bernahme in den Sammel-Auftrag l�schen"));

    final LabelInput comment = new LabelInput("");
    comment.setColor(Color.ERROR);
    container.addLabelPair("",comment);

    ButtonArea b = new ButtonArea();
    b.addButton(i18n.tr("�bernehmen"), new Action()
    {
      public void handleAction(Object context) throws ApplicationException
      {
        try
        {
          delete = (Boolean) delBox.getValue();
          boolean use = ((Boolean) getUseExisting().getValue()).booleanValue();

          if (use)
          {
            // Wir verwenden einen existierenden Auftrag
            transfer = (SammelTransfer) getExistingList().getValue();
            if (transfer == null)
            {
              comment.setValue(i18n.tr("Bitte w�hlen Sie einen Auftrag aus."));
              return;
            }
          }
          else
          {
            // Wir erstellen einen neuen Auftrag
            // Checken, ob Konto ausgewaehlt wurde
            Konto konto = (Konto) getKonto().getValue();
            if (konto == null)
            {
              comment.setValue(i18n.tr("Bitte w�hlen Sie ein Konto aus."));
              return;
            }
            transfer.setKonto(konto);

            // Checken, ob Bezeichnung eingegeben wurde
            String text = (String) getBezeichnung().getValue();
            if (text == null || text.length() == 0)
            {
              comment.setValue(i18n.tr("Bitte geben Sie eine Bezeichnung ein."));
              return;
            }
            transfer.setBezeichnung(text);
            transfer.setTermin(new Date());
          }
        }
        catch (RemoteException e)
        {
          Logger.error("error while checking transfer",e);
          throw new ApplicationException(i18n.tr("Fehler beim Pr�fen des Auftrages"));
        }
        close();
      }
    },null,false,"ok.png");
    b.addButton(i18n.tr("Abbrechen"), new Action()
    {
      public void handleAction(Object context) throws ApplicationException
      {
        throw new OperationCanceledException();
      }
    },null,false,"process-stop.png");

    container.addButtonArea(b);
    getShell().setMinimumSize(getShell().computeSize(550,SWT.DEFAULT));
  }

  /**
   * Liefert true, wenn der urspruengliche Auftrag nach der Uebernahme geloescht werden soll.
   * @return true, wenn der urspruengliche Auftrag nach der Uebernahme geloescht werden soll.
   */
  public boolean getDelete()
  {
    return this.delete.booleanValue();
  }

  /**
   * Liefert eine Checkbox, mit der zwischen "Neuer Sammel-Auftrag" und "Existierenden benutzen" umgeschaltet werden kann.
   * @return Checkbox.
   * @throws RemoteException
   */
  private CheckboxInput getUseExisting() throws RemoteException
  {
    if (this.useExisting != null)
      return this.useExisting;

    this.useExisting = new CheckboxInput(false);
    this.useExisting.setName(i18n.tr("Einem existierenden Sammel-Auftrag zuordnen"));
    this.useExisting.addListener(new Listener()
    {
      /**
       * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
       */
      public void handleEvent(Event event)
      {
        try
        {
          boolean use = ((Boolean)useExisting.getValue()).booleanValue();
          getExistingList().setEnabled(use);
          getKonto().setEnabled(!use);
          getBezeichnung().setEnabled(!use);
        }
        catch (Exception e)
        {
          Logger.error("error while switching state",e);
        }
      }
    });

    return this.useExisting;
  }

  /**
   * Liefert eine Selectbox mit den bereits existierenden Sammel-Auftraegen, die noch nicht ausgefuehrt wurden.
   * @return Selectbox.
   * @throws RemoteException
   */
  private SelectInput getExistingList() throws RemoteException
  {
    if (this.existing != null)
      return this.existing;

    HBCIDBService service = (HBCIDBService) Settings.getDBService();
    DBIterator list = this.transfer.getList();
    list.addFilter("ausgefuehrt = 0");
    list.setOrder("ORDER BY " + service.getSQLTimestamp("termin") + " DESC, id DESC");
    this.existing = new SelectInput(list,null);
    this.existing.setName(i18n.tr("Existierende Auftr�ge"));
    this.existing.setPleaseChoose(i18n.tr("Bitte w�hlen..."));
    this.existing.setEnabled(false);

    // Wenn wir keine existierenden Auftraege haben, koennen wir das gleich komplett deaktivieren
    if (list.size() == 0)
    {
      getUseExisting().setValue(Boolean.FALSE);
      getUseExisting().setEnabled(false);
    }

    return this.existing;
  }

  /**
   * Liefert eine Selectbox fuer das Konto bei Neuanlage des Sammelauftrages.
   * @return Selectbox.
   * @throws RemoteException
   */
  private SelectInput getKonto() throws RemoteException
  {
    if (this.konto == null)
    {
      this.konto = new KontoInput(this.transfer.getKonto(),KontoFilter.ONLINE);
      this.konto.setMandatory(true);
    }
    return this.konto;
  }

  /**
   * Liefert ein Textfeld fuer die Eingabe der Bezeichnung bei Neuanlage des Sammelauftrages.
   * @return Textfeld.
   * @throws RemoteException
   */
  private TextInput getBezeichnung() throws RemoteException
  {
    if (this.bezeichnung != null)
      return this.bezeichnung;

    String s = this.transfer.getBezeichnung();
    if (s == null || s.length() == 0)
      s = i18n.tr("Sammel-Auftrag vom {0}", HBCI.DATEFORMAT.format(new Date()));

    this.bezeichnung = new TextInput(s,255);
    this.bezeichnung.setMandatory(true);
    this.bezeichnung.setName(i18n.tr("Bezeichnung"));
    return this.bezeichnung;
  }

}
TOP

Related Classes of de.willuhn.jameica.hbci.gui.dialogs.TransferMergeDialog

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.