Package de.willuhn.jameica.hbci.messaging

Source Code of de.willuhn.jameica.hbci.messaging.CheckOfflineUmsatzMessageConsumer

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/messaging/CheckOfflineUmsatzMessageConsumer.java,v $
* $Revision: 1.6 $
* $Date: 2011/04/13 08:46:15 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/

package de.willuhn.jameica.hbci.messaging;

import org.apache.commons.lang.StringUtils;

import de.willuhn.datasource.GenericObject;
import de.willuhn.jameica.hbci.HBCI;
import de.willuhn.jameica.hbci.SynchronizeOptions;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.hbci.rmi.Umsatz;
import de.willuhn.jameica.hbci.server.KontoUtil;
import de.willuhn.jameica.messaging.Message;
import de.willuhn.jameica.messaging.MessageConsumer;
import de.willuhn.jameica.system.Application;
import de.willuhn.util.I18N;

/**
* Pr�ft eingehende Ums�tze, ob diese als Gegenkonto ein eigenes Offlinekonto haben.
* Wenn ja, wird der entsprechende Umsatz f�r das Offlinekonto angelegt.
*/
public class CheckOfflineUmsatzMessageConsumer implements MessageConsumer
{
  private final static I18N i18n = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();

  /**
   * @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister()
   */
  public boolean autoRegister()
  {
    return true;
  }

  /**
   * @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes()
   */
  public Class[] getExpectedMessageTypes()
  {
    return new Class[]{ImportMessage.class};
  }

  /**
   * @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message)
   */
  public void handleMessage(Message message) throws Exception
  {
    // Wenn es keine Import-Message ist ignorieren wir die folgenden
    if (message == null || !(message instanceof ImportMessage))
      return;
   
    GenericObject o = ((ImportMessage)message).getObject();
   
    if (!(o instanceof Umsatz))
      return; // interessiert uns nicht
   
    // wir haben einen Umsatz, den es zu bearbeiten gilt...
    Umsatz u = (Umsatz) o;
   
    // Vormerkbuchungen ignorieren wir. Zum einen, weil wir sie in dem
    // Offline-Konto nicht wieder automatisch loeschen, zum anderen, weil
    // der User sie auch nicht loeschen kann
    if (u.hasFlag(Umsatz.FLAG_NOTBOOKED))
      return;
   
    // Wenn der Umsatz schon von einem Offline-Konto kommt, legen
    // wir keine Gegenbuchung mehr an. Das fuehrt sonst zu einem Ping-Pong-Spiel ;)
    Konto k = u.getKonto();
    if (k.hasFlag(Konto.FLAG_OFFLINE))
      return;

    // Checken, ob wir ein lokal passendes Offline-Konto haben
    Konto gegenkonto = null;
    if (StringUtils.trimToEmpty(u.getGegenkontoNummer()).length() > 10)
    {
      // Das ist eine IBAN
      gegenkonto = KontoUtil.findByIBAN(u.getGegenkontoNummer(),Konto.FLAG_OFFLINE);
    }
    else
    {
      // Konto mit Kto und BLZ
      gegenkonto = KontoUtil.find(u.getGegenkontoNummer(), u.getGegenkontoBLZ(),Konto.FLAG_OFFLINE);
    }
   
    if (gegenkonto == null)
      return; // Das Konto haben wir nicht
   
    // Checken, ob fuer das Konto automatisch Umsaetze angelegt werden sollen
    SynchronizeOptions options = new SynchronizeOptions(gegenkonto);
    if (!options.getSyncOffline())
      return;

    // Kopie der Buchung erzeugen
    Umsatz gegenbuchung = u.duplicate();

    // Betrag negieren
    gegenbuchung.setBetrag(-gegenbuchung.getBetrag());

    // Konten tauschen
    gegenbuchung.setKonto(gegenkonto);
    gegenbuchung.setGegenkontoNummer(k.getKontonummer());
    gegenbuchung.setGegenkontoBLZ(k.getBLZ());
    gegenbuchung.setGegenkontoName(k.getName());
   
    // Art des Umsatzes setzen, Laenge ggf. auf DB-Feldlaenge k�uerzen
    String art = i18n.tr("Auto-Buchung Offline-Konto");
    if (art.length()>100) art = art.substring(0, 100);
    gegenbuchung.setArt(art);
   
    // Saldo berechnen
    gegenbuchung.setSaldo(gegenkonto.getSaldo() + gegenbuchung.getBetrag());
   
    // Umsatztyp loeschen
    gegenbuchung.setUmsatzTyp(null);

    gegenbuchung.store(); // Umsatz speichern
   
    // neuen Umsatz bekannt geben
    Application.getMessagingFactory().sendMessage(new ImportMessage(gegenbuchung));
  }

}

/*******************************************************************************
* $Log: CheckOfflineUmsatzMessageConsumer.java,v $
* Revision 1.6  2011/04/13 08:46:15  willuhn
* @B Vormerkbuchungen nicht mehr automatisch in Offline-Konten uebernehmen. Die werden dort naemlich nicht mehr geloescht und der User kann sie auch nicht loeschen
*
* Revision 1.5  2010-11-08 10:37:00  willuhn
* @N BUGZILLA 945
*
******************************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.messaging.CheckOfflineUmsatzMessageConsumer

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.