Subversion Repositories public

Rev

Rev 68 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/***************************************************************************
 *   Copyright (C) 2007 by Andreas Theofilu                                *
 *   andreas@TheoSys.at                                                    *
 *                                                                         *
 *   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 version 3 of the License.                *
 *                                                                         *
 *   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, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include <kmessagebox.h>
#include <klistview.h>
#include <klocale.h>
#include <qdir.h>
#include <qfile.h>
#include <qclipboard.h>
#include <qapplication.h>
#include <qlabel.h>

#include <sys/stat.h>

#include "ratenplanwidget.h"
#include "helper.h"
#include "tilgplan.h"

ratenplanWidget::ratenplanWidget ( QWidget* parent, const char* name, bool modal, WFlags fl )
                : ratenplanWidgetBase ( parent,name, modal,fl )
{
        // Spaltenbreiten und Alignment setzen
        kListView_Plan->setColumnWidth(0, 50);          // Datum
        kListView_Plan->setColumnWidth(1, 80);          // Datum
        kListView_Plan->setColumnWidth(2, 110);         // Text
        kListView_Plan->setColumnWidth(3, 100);         // Kapital
        kListView_Plan->setColumnAlignment(3, Qt::AlignRight);
        kListView_Plan->setColumnWidth(4, 100);         // Tilgung
        kListView_Plan->setColumnAlignment(4, Qt::AlignRight);
        kListView_Plan->setColumnWidth(5, 100);         // Annuität
        kListView_Plan->setColumnAlignment(5, Qt::AlignRight);
        kListView_Plan->setColumnWidth(6, 100);         // Zinsen
        kListView_Plan->setColumnAlignment(6, Qt::AlignRight);
        kListView_Plan->setColumnWidth(7, 100);         // Restkapital
        kListView_Plan->setColumnAlignment(7, Qt::AlignRight);
        kListView_Plan->setSortColumn(0);
        readDTable();
}

ratenplanWidget::~ratenplanWidget()
{}

void ratenplanWidget::readDTable()
{
QString hdir = QDir::homeDirPath ();
QString zeile, datum, text, kapital, tilg, rate, zinsen, rkapi;
QFile tmpFile;
TPPARS TpPars;
DTABLE dTable;
int day, mon, year, line;
char hv0[32];
struct stat sbuf;

        hdir.append("/.date_tbl.dat");
        tmpFile.setName(hdir);

        if (tmpFile.open(IO_ReadOnly) == FALSE)
        {
           KMessageBox::error(0, QString("Could not open file for reading: %1").arg(tmpFile.errorString()));
           return;
        }
        
        fstat (tmpFile.handle(), &sbuf);

        if (sbuf.st_size <= (long)sizeof(TPPARS))
        {
           tmpFile.close ();
           KMessageBox::information(this, i18n("Bitte berechnen sie zuerst einen Tilgungsplan!"));
           return;
        }

        // Als erstes befindet sich die Struktur mit den Parametern und
        // Summenergebnissen in der Datei.
        read(tmpFile.handle(), &TpPars, sizeof(TPPARS));

        // Nun lesen wir den Ratenplan aus und schreiben das Ergebnis in die
        // Tabelle der Dialogbox.
        line = 1;

        while (read (tmpFile.handle(), &dTable, sizeof(DTABLE)) >= (int)sizeof(DTABLE))
        {
              zeile.sprintf("%04d", line);
              date_int(&day, &mon, &year, dTable.datum);
              datum.sprintf("%02d.%02d.%d", day, mon, year);

              switch (dTable.kz)
              {
                 case 'U': text = QString("Auszahlung"); break;
                 case 'A': text = QString("Abschluss"); break;
                 case 'R': text = QString("Rate"); break;
                 case 'Z': text = QString::fromUtf8("Zinssatzänderung auf %1").arg(dTable.rate, 0, 'f', 3); break;
                 case 'E':
                    text = QString("Ergebnis");
                    date_int(&day, &mon, &year, TpPars.ragab);
                    datum.sprintf("%02d.%02d.%d", day, mon, year);
                 break;
                 default:  text = QString("??? <%1>").arg(dTable.kz);
              }

              if (dTable.kz != 'Z')
              {
                 kapital = QString("%1").arg(PointNumber(dTable.kapital, 2, &hv0[0]));
                 tilg = QString("%1").arg(PointNumber(dTable.tilg, 2, &hv0[0]));
                 rate = QString("%1").arg(PointNumber(dTable.rate, 2, &hv0[0]));
                 zinsen = QString("%1").arg(PointNumber(dTable.zinsen, 2, &hv0[0]));
                 rkapi = QString("%1").arg(PointNumber(dTable.rkapi, 2, &hv0[0]));
              }
              else
              {
                 kapital = QString("");
                 tilg = QString("");
                 rate = QString("");
                 zinsen = QString("");
                 rkapi = QString("");
              }

              QListViewItem *element = new QListViewItem(kListView_Plan, zeile, datum, text, kapital, tilg, rate, zinsen, rkapi);
              kListView_Plan->insertItem(element);
              line++;
        }

        tmpFile.close();
}

/*$SPECIALIZATION$*/
void ratenplanWidget::pbCancelSlot()
{
        done(QDialog::Accepted);
}

void ratenplanWidget::lbSelSlot(QListViewItem *item)
{
QString zeile;
QClipboard *cb = QApplication::clipboard();

        if (!item)
           return;

        zeile.append(item->text(1).ascii());    // Datum
        zeile.append("\t");
        zeile.append(item->text(2).ascii());    // Text
        zeile.append("\t");
        zeile.append(item->text(3).ascii());    // Kapital
        zeile.append("\t");
        zeile.append(item->text(4).ascii());    // Tilgung
        zeile.append("\t");
        zeile.append(item->text(5).ascii());    // Rate
        zeile.append("\t");
        zeile.append(item->text(6).ascii());    // Zinsen
        zeile.append("\t");
        zeile.append(item->text(7).ascii());    // Restkapital

        cb->setText(zeile);
        textLabel_Status->setText(QString("Zeile %1 des Ratenplans wurde in Zwischenablage kopiert").arg(item->text(0).ascii()));
}

void ratenplanWidget::pbClipboardSlot()
{
QString hdir = QDir::homeDirPath ();
QString zeile, str;
QFile tmpFile;
TPPARS TpPars;
DTABLE dTable;
int day, mon, year, line;
char hv0[128];
struct stat sbuf;
QClipboard *cb = QApplication::clipboard();

        hdir.append("/.date_tbl.dat");
        tmpFile.setName(hdir);

        if (tmpFile.open(IO_ReadOnly) == FALSE)
        {
           KMessageBox::error(0, QString("Could not open file for reading: %1").arg(tmpFile.errorString()));
           return;
        }
        
        fstat (tmpFile.handle(), &sbuf);

        if (sbuf.st_size <= (long)sizeof(TPPARS))
        {
           tmpFile.close ();
           KMessageBox::information(this, i18n("Bitte berechnen sie zuerst einen Tilgungsplan!"));
           return;
        }

        // Als erstes befindet sich die Struktur mit den Parametern und
        // Summenergebnissen in der Datei.
        read(tmpFile.handle(), &TpPars, sizeof(TPPARS));
        // Diese schreiben wir als erstes in das Clipboard
        zeile = QString("Auszahlungsbetrag:\t%1\n").arg(PointNumber(TpPars.rahmen, 2, &hv0[0]));
        date_int(&day, &mon, &year, TpPars.ragab);
        str.sprintf("Auszahlung am:\t%02d.%02d.%d\n", day, mon, year);
        zeile.append(str);
        str.sprintf("Zinssatz Soll:\t%s\n\n", PointNumber(TpPars.zssoll, 3, &hv0[0]));
        zeile.append(str);

        // Nun lesen wir den Ratenplan aus und schreiben das Ergebnis in das
        // Clipboard
        // Überschrift
        zeile.append("Datum\tText\tKapital\tTilgung\tRate\tZinsen\tRestkapital\n");
        // Loop
        line = 1;

        while (read (tmpFile.handle(), &dTable, sizeof(DTABLE)) >= (int)sizeof(DTABLE))
        {
              date_int(&day, &mon, &year, dTable.datum);

              if (dTable.kz != 'E')
                 str.sprintf("%02d.%02d.%d\t", day, mon, year);
              else
                 str.sprintf("Raten: %ld\t", dTable.datum);

              zeile.append(str);

              switch (dTable.kz)
              {
                 case 'U': zeile.append("Auszahlung\t"); break;
                 case 'A': zeile.append("Abschluss\t"); break;
                 case 'R': zeile.append("Rate\t"); break;
                 case 'Z':
                    str = QString("Zinssatzänderung auf %1\n").arg(dTable.rate, 0, 'f', 3);
                    zeile.append(str);
                 break;
                 case 'E': zeile.append("Ergebnis\t"); break;
                 default:
                    str = QString("??? <%1>\t").arg(dTable.kz);
                    zeile.append(str);
              }

              if (dTable.kz != 'Z')
              {
                 str = QString("%1\t").arg(PointNumber(dTable.kapital, 2, &hv0[0]));
                 zeile.append(str);
                 str = QString("%1\t").arg(PointNumber(dTable.tilg, 2, &hv0[0]));
                 zeile.append(str);
                 str = QString("%1\t").arg(PointNumber(dTable.rate, 2, &hv0[0]));
                 zeile.append(str);
                 str = QString("%1\t").arg(PointNumber(dTable.zinsen, 2, &hv0[0]));
                 zeile.append(str);
                 str = QString("%1\n").arg(PointNumber(dTable.rkapi, 2, &hv0[0]));
                 zeile.append(str);
              }
              else
              {
                 str = QString("\t\t\t\t\n");
                 zeile.append(str);
              }
              line++;
        }

        tmpFile.close();
        cb->setText(zeile);
        textLabel_Status->setText(i18n("Ratenplan wurde in Zwischenablage kopiert"));
}

void ratenplanWidget::pbSaveSlot()
{
}


#include "ratenplanwidget.moc"