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"