Subversion Repositories public

Rev

Rev 61 | Rev 68 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
61 andreas 1
/***************************************************************************
2
 *   Copyright (C) 2007 by Andreas Theofilu                                *
3
 *   andreas@TheoSys.at                                                    *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation version 3 of the License.                *
8
 *                                                                         *
9
 *   This program is distributed in the hope that it will be useful,       *
10
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12
 *   GNU General Public License for more details.                          *
13
 *                                                                         *
14
 *   You should have received a copy of the GNU General Public License     *
15
 *   along with this program; if not, write to the                         *
16
 *   Free Software Foundation, Inc.,                                       *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18
 ***************************************************************************/
19
 
20
#include <kmessagebox.h>
21
#include <klistview.h>
22
#include <klocale.h>
23
#include <qdir.h>
24
#include <qfile.h>
67 andreas 25
#include <qclipboard.h>
26
#include <qapplication.h>
27
#include <qlabel.h>
61 andreas 28
 
29
#include <sys/stat.h>
30
 
31
#include "ratenplanwidget.h"
32
#include "helper.h"
33
#include "tilgplan.h"
34
 
35
ratenplanWidget::ratenplanWidget ( QWidget* parent, const char* name, bool modal, WFlags fl )
36
		: ratenplanWidgetBase ( parent,name, modal,fl )
37
{
38
	// Spaltenbreiten und Alignment setzen
39
	kListView_Plan->setColumnWidth(0, 50);		// Datum
40
	kListView_Plan->setColumnWidth(1, 80);		// Datum
41
	kListView_Plan->setColumnWidth(2, 110);		// Text
42
	kListView_Plan->setColumnWidth(3, 100);		// Kapital
43
	kListView_Plan->setColumnAlignment(3, Qt::AlignRight);
44
	kListView_Plan->setColumnWidth(4, 100);		// Tilgung
45
	kListView_Plan->setColumnAlignment(4, Qt::AlignRight);
46
	kListView_Plan->setColumnWidth(5, 100);		// Annuität
47
	kListView_Plan->setColumnAlignment(5, Qt::AlignRight);
48
	kListView_Plan->setColumnWidth(6, 100);		// Zinsen
49
	kListView_Plan->setColumnAlignment(6, Qt::AlignRight);
50
	kListView_Plan->setColumnWidth(7, 100);		// Restkapital
51
	kListView_Plan->setColumnAlignment(7, Qt::AlignRight);
52
	kListView_Plan->setSortColumn(0);
53
	readDTable();
54
}
55
 
56
ratenplanWidget::~ratenplanWidget()
57
{}
58
 
59
void ratenplanWidget::readDTable()
60
{
61
QString hdir = QDir::homeDirPath ();
62
QString zeile, datum, text, kapital, tilg, rate, zinsen, rkapi;
63
QFile tmpFile;
64
TPPARS TpPars;
65
DTABLE dTable;
66
int day, mon, year, line;
67
char hv0[32];
68
struct stat sbuf;
69
 
70
	hdir.append("/.date_tbl.dat");
71
	tmpFile.setName(hdir);
72
 
73
	if (tmpFile.open(IO_ReadOnly) == FALSE)
74
	{
75
	   KMessageBox::error(0, QString("Could not open file for reading: %1").arg(tmpFile.errorString()));
76
	   return;
77
	}
78
 
79
	fstat (tmpFile.handle(), &sbuf);
80
 
67 andreas 81
	if (sbuf.st_size <= (long)sizeof(TPPARS))
61 andreas 82
	{
83
	   tmpFile.close ();
84
	   KMessageBox::information(this, i18n("Bitte berechnen sie zuerst einen Tilgungsplan!"));
85
	   return;
86
	}
87
 
88
	// Als erstes befindet sich die Struktur mit den Parametern und
89
	// Summenergebnissen in der Datei.
90
	read(tmpFile.handle(), &TpPars, sizeof(TPPARS));
91
 
92
	// Nun lesen wir den Ratenplan aus und schreiben das Ergebnis in die
93
	// Tabelle der Dialogbox.
94
	line = 1;
95
 
67 andreas 96
	while (read (tmpFile.handle(), &dTable, sizeof(DTABLE)) >= (int)sizeof(DTABLE))
61 andreas 97
	{
98
	      zeile.sprintf("%04d", line);
99
	      date_int(&day, &mon, &year, dTable.datum);
100
	      datum.sprintf("%02d.%02d.%d", day, mon, year);
101
 
102
	      switch (dTable.kz)
103
	      {
104
		 case 'A': text = QString("Abschluss"); break;
105
		 case 'R': text = QString("Rate"); break;
106
		 case 'Z': text = QString::fromUtf8("Zinssatzänderung auf %1").arg(dTable.rate, 0, 'f', 3); break;
107
		 case 'E':
108
		    text = QString("Ergebnis");
109
		    date_int(&day, &mon, &year, TpPars.ragab);
110
		    datum.sprintf("%02d.%02d.%d", day, mon, year);
111
		 break;
112
		 default:  text = QString("??? <%1>").arg(dTable.kz);
113
	      }
114
 
115
	      if (dTable.kz != 'Z')
116
	      {
117
		 kapital = QString("%1").arg(PointNumber(dTable.kapital, 2, &hv0[0]));
118
		 tilg = QString("%1").arg(PointNumber(dTable.tilg, 2, &hv0[0]));
119
		 rate = QString("%1").arg(PointNumber(dTable.rate, 2, &hv0[0]));
120
		 zinsen = QString("%1").arg(PointNumber(dTable.zinsen, 2, &hv0[0]));
121
		 rkapi = QString("%1").arg(PointNumber(dTable.rkapi, 2, &hv0[0]));
122
	      }
123
	      else
124
	      {
125
		 kapital = QString("");
126
		 tilg = QString("");
127
		 rate = QString("");
128
		 zinsen = QString("");
129
		 rkapi = QString("");
130
	      }
131
 
132
	      QListViewItem *element = new QListViewItem(kListView_Plan, zeile, datum, text, kapital, tilg, rate, zinsen, rkapi);
133
	      kListView_Plan->insertItem(element);
134
	      line++;
135
	}
136
 
137
	tmpFile.close();
138
}
139
 
140
/*$SPECIALIZATION$*/
141
void ratenplanWidget::pbCancelSlot()
142
{
143
	done(QDialog::Accepted);
144
}
145
 
67 andreas 146
void ratenplanWidget::lbSelSlot(QListViewItem *item)
147
{
148
QString zeile;
149
QClipboard *cb = QApplication::clipboard();
150
 
151
	zeile.append(item->text(1).ascii());	// Datum
152
	zeile.append("\t");
153
	zeile.append(item->text(2).ascii());	// Text
154
	zeile.append("\t");
155
	zeile.append(item->text(3).ascii());	// Kapital
156
	zeile.append("\t");
157
	zeile.append(item->text(4).ascii());	// Tilgung
158
	zeile.append("\t");
159
	zeile.append(item->text(5).ascii());	// Rate
160
	zeile.append("\t");
161
	zeile.append(item->text(6).ascii());	// Zinsen
162
	zeile.append("\t");
163
	zeile.append(item->text(7).ascii());	// Restkapital
164
 
165
	cb->setText(zeile);
166
	textLabel_Status->setText(QString("Zeile %1 des Ratenplans wurde in Zwischenablage kopiert").arg(item->text(0).ascii()));
167
}
168
 
169
void ratenplanWidget::pbClipboardSlot()
170
{
171
QString hdir = QDir::homeDirPath ();
172
QString zeile, str;
173
QFile tmpFile;
174
TPPARS TpPars;
175
DTABLE dTable;
176
int day, mon, year, line;
177
char hv0[128];
178
struct stat sbuf;
179
QClipboard *cb = QApplication::clipboard();
180
 
181
	hdir.append("/.date_tbl.dat");
182
	tmpFile.setName(hdir);
183
 
184
	if (tmpFile.open(IO_ReadOnly) == FALSE)
185
	{
186
	   KMessageBox::error(0, QString("Could not open file for reading: %1").arg(tmpFile.errorString()));
187
	   return;
188
	}
189
 
190
	fstat (tmpFile.handle(), &sbuf);
191
 
192
	if (sbuf.st_size <= (long)sizeof(TPPARS))
193
	{
194
	   tmpFile.close ();
195
	   KMessageBox::information(this, i18n("Bitte berechnen sie zuerst einen Tilgungsplan!"));
196
	   return;
197
	}
198
 
199
	// Als erstes befindet sich die Struktur mit den Parametern und
200
	// Summenergebnissen in der Datei.
201
	read(tmpFile.handle(), &TpPars, sizeof(TPPARS));
202
	// Diese schreiben wir als erstes in das Clipboard
203
	zeile = QString("Auszahlungsbetrag:\t%1\n").arg(PointNumber(TpPars.rahmen, 2, &hv0[0]));
204
	date_int(&day, &mon, &year, TpPars.ragab);
205
	str.sprintf("Auszahlung am:\t%02d.%02d.%d\n", day, mon, year);
206
	zeile.append(str);
207
	str.sprintf("Zinssatz Soll:\t%s\n\n", PointNumber(TpPars.zssoll, 3, &hv0[0]));
208
	zeile.append(str);
209
 
210
	// Nun lesen wir den Ratenplan aus und schreiben das Ergebnis in das
211
	// Clipboard
212
	// Überschrift
213
	zeile.append("Datum\tText\tKapital\tTilgung\tRate\tZinsen\tRestkapital\n");
214
	// Loop
215
	line = 1;
216
 
217
	while (read (tmpFile.handle(), &dTable, sizeof(DTABLE)) >= (int)sizeof(DTABLE))
218
	{
219
	      date_int(&day, &mon, &year, dTable.datum);
220
 
221
	      if (dTable.kz != 'E')
222
		 str.sprintf("%02d.%02d.%d\t", day, mon, year);
223
	      else
224
		 str.sprintf("Raten: %ld\t", dTable.datum);
225
 
226
	      zeile.append(str);
227
 
228
	      switch (dTable.kz)
229
	      {
230
		 case 'A': zeile.append("Abschluss\t"); break;
231
		 case 'R': zeile.append("Rate\t"); break;
232
		 case 'Z':
233
		    str = QString("Zinssatzänderung auf %1\n").arg(dTable.rate, 0, 'f', 3);
234
		    zeile.append(str);
235
		 break;
236
		 case 'E': zeile.append("Ergebnis\t"); break;
237
		 default:
238
		    str = QString("??? <%1>\t").arg(dTable.kz);
239
		    zeile.append(str);
240
	      }
241
 
242
	      if (dTable.kz != 'Z')
243
	      {
244
		 str = QString("%1\t").arg(PointNumber(dTable.kapital, 2, &hv0[0]));
245
		 zeile.append(str);
246
		 str = QString("%1\t").arg(PointNumber(dTable.tilg, 2, &hv0[0]));
247
		 zeile.append(str);
248
		 str = QString("%1\t").arg(PointNumber(dTable.rate, 2, &hv0[0]));
249
		 zeile.append(str);
250
		 str = QString("%1\t").arg(PointNumber(dTable.zinsen, 2, &hv0[0]));
251
		 zeile.append(str);
252
		 str = QString("%1\n").arg(PointNumber(dTable.rkapi, 2, &hv0[0]));
253
		 zeile.append(str);
254
	      }
255
	      else
256
	      {
257
		 str = QString("\t\t\t\t\n");
258
		 zeile.append(str);
259
	      }
260
	      line++;
261
	}
262
 
263
	tmpFile.close();
264
	cb->setText(zeile);
265
	textLabel_Status->setText(i18n("Ratenplan wurde in Zwischenablage kopiert"));
266
}
267
 
268
void ratenplanWidget::pbSaveSlot()
269
{
270
}
271
 
272
 
61 andreas 273
#include "ratenplanwidget.moc"
274