/**********************************************************************
 * Copyright (c) by Heiner Jostkleigrewe
 * This program is free software: you can redistribute it and/or modify it under the terms of the 
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 *
 *  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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program.  If not, 
 * see <http://www.gnu.org/licenses/>.
 * 
 * heiner@jverein.de
 * www.jverein.de
 **********************************************************************/
package de.jost_net.JVerein.gui.parts;

import java.rmi.RemoteException;

import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;

import de.jost_net.JVerein.Einstellungen;
import de.jost_net.JVerein.Einstellungen.Property;
import de.jost_net.JVerein.gui.control.BuchungsControl;
import de.jost_net.JVerein.gui.control.DokumentControl;
import de.jost_net.JVerein.rmi.BuchungDokument;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.jameica.gui.Part;
import de.willuhn.jameica.gui.input.DateInput;
import de.willuhn.jameica.gui.parts.ButtonArea;
import de.willuhn.jameica.gui.util.ColumnLayout;
import de.willuhn.jameica.gui.util.LabelGroup;
import de.willuhn.jameica.gui.util.ScrolledContainer;
import de.willuhn.jameica.gui.util.SimpleContainer;

public class BuchungPart implements Part
{
  private BuchungsControl control;

  private DokumentControl dcontrol;

  private boolean buchungabgeschlossen;

  public BuchungPart(BuchungsControl control, boolean buchungabgeschlossen)
  {
    this.control = control;
    this.buchungabgeschlossen = buchungabgeschlossen;
  }

  @Override
  public void paint(Composite parent) throws RemoteException
  {
    String title = control.getBuchung().isSplitbuchung() ? "Splitbuchung"
        : "Buchung";
    GUI.getView().setTitle(title);

    ScrolledContainer scrolled = new ScrolledContainer(parent, 1);

    ColumnLayout cols1 = new ColumnLayout(scrolled.getComposite(), 2);

    SimpleContainer grKontoauszug = new SimpleContainer(cols1.getComposite());

    grKontoauszug.addHeadline(title);
    grKontoauszug.addLabelPair("Buchungsnummer", control.getID());
    grKontoauszug.addLabelPair("Umsatz-ID", control.getUmsatzid());
    grKontoauszug.addLabelPair("Konto", control.getKonto(true));
    grKontoauszug.addLabelPair("Name", control.getName());
    grKontoauszug.addLabelPair("IBAN", control.getIban());
    grKontoauszug.addLabelPair("Betrag", control.getBetrag());
    grKontoauszug.addLabelPair("Verwendungszweck", control.getZweck());
    DateInput date = control.getDatum();
    grKontoauszug.addLabelPair("Datum", date);
    if (control.getBuchung().isSplitbuchung())
      date.setEnabled(false);
    grKontoauszug.addLabelPair("Art", control.getArt());
    grKontoauszug.addLabelPair("Kommentar", control.getKommentar());

    SimpleContainer grBuchungsinfos = new SimpleContainer(cols1.getComposite());

    grBuchungsinfos.addHeadline("Buchungsinfos");
    grBuchungsinfos.addLabelPair("Buchungsart", control.getBuchungsart());
    if ((Boolean) Einstellungen.getEinstellung(Property.STEUERINBUCHUNG))
    {
      grBuchungsinfos.addLabelPair("Steuer", control.getSteuer());
    }
    if ((Boolean) Einstellungen
        .getEinstellung(Property.BUCHUNGSKLASSEINBUCHUNG))
    {
      grBuchungsinfos.addLabelPair("Buchungsklasse",
          control.getBuchungsklasse());
    }
    if ((Boolean) Einstellungen.getEinstellung(Property.PROJEKTEANZEIGEN))
    {
      grBuchungsinfos.addLabelPair("Projekt", control.getProjekt());
    }
    grBuchungsinfos.addLabelPair("Auszugsnummer", control.getAuszugsnummer());
    grBuchungsinfos.addLabelPair("Blattnummer", control.getBlattnummer());
    grBuchungsinfos.addLabelPair("Sollbuchung", control.getSollbuchungInput());
    grBuchungsinfos.addLabelPair("Geprüft", control.getGeprueft());

    if ((Boolean) Einstellungen
        .getEinstellung(Property.SPENDENBESCHEINIGUNGENANZEIGEN))
    {
      SimpleContainer grSpendeninfos = grBuchungsinfos;
      grSpendeninfos.addHeadline("Geldspende");
      grSpendeninfos.addLabelPair("Erstattungsverzicht", control.getVerzicht());
      grSpendeninfos.addHeadline("Sachspende");
      grSpendeninfos.addLabelPair("Bezeichnung Sachzuwendung",
          control.getBezeichnungSachzuwendung());
      grSpendeninfos.addLabelPair("Herkunft", control.getHerkunftSpende());
      grSpendeninfos.addLabelPair("Unterlagen Wertermittlung",
          control.getUnterlagenWertermittlung());
    }

    if ((Boolean) Einstellungen.getEinstellung(Property.DOKUMENTENSPEICHERUNG))
    {
      LabelGroup grDokument = new LabelGroup(scrolled.getComposite(),
          "Dokumente", true);

      dcontrol = new DokumentControl(!buchungabgeschlossen,
          BuchungDokument.class);

      grDokument.getComposite().setLayout(new GridLayout(1, false));
      ButtonArea butts = new ButtonArea();
      butts.addButton(dcontrol.getNeuButton());
      butts.paint(grDokument.getComposite());

      grDokument.addPart(dcontrol.getDokumenteList());
      dcontrol.setDragDrop(grDokument.getComposite());

      GridData gridData = new GridData(GridData.FILL_BOTH);
      gridData.heightHint = 150;
      grDokument.getComposite().setLayoutData(gridData);
    }
  }
}
