Subversion Repositories public

Rev

Rev 67 | 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
 
68 andreas 151
	if (!item)
152
	   return;
153
 
67 andreas 154
	zeile.append(item->text(1).ascii());	// Datum
155
	zeile.append("\t");
156
	zeile.append(item->text(2).ascii());	// Text
157
	zeile.append("\t");
158
	zeile.append(item->text(3).ascii());	// Kapital
159
	zeile.append("\t");
160
	zeile.append(item->text(4).ascii());	// Tilgung
161
	zeile.append("\t");
162
	zeile.append(item->text(5).ascii());	// Rate
163
	zeile.append("\t");
164
	zeile.append(item->text(6).ascii());	// Zinsen
165
	zeile.append("\t");
166
	zeile.append(item->text(7).ascii());	// Restkapital
167
 
168
	cb->setText(zeile);
169
	textLabel_Status->setText(QString("Zeile %1 des Ratenplans wurde in Zwischenablage kopiert").arg(item->text(0).ascii()));
170
}
171
 
172
void ratenplanWidget::pbClipboardSlot()
173
{
174
QString hdir = QDir::homeDirPath ();
175
QString zeile, str;
176
QFile tmpFile;
177
TPPARS TpPars;
178
DTABLE dTable;
179
int day, mon, year, line;
180
char hv0[128];
181
struct stat sbuf;
182
QClipboard *cb = QApplication::clipboard();
183
 
184
	hdir.append("/.date_tbl.dat");
185
	tmpFile.setName(hdir);
186
 
187
	if (tmpFile.open(IO_ReadOnly) == FALSE)
188
	{
189
	   KMessageBox::error(0, QString("Could not open file for reading: %1").arg(tmpFile.errorString()));
190
	   return;
191
	}
192
 
193
	fstat (tmpFile.handle(), &sbuf);
194
 
195
	if (sbuf.st_size <= (long)sizeof(TPPARS))
196
	{
197
	   tmpFile.close ();
198
	   KMessageBox::information(this, i18n("Bitte berechnen sie zuerst einen Tilgungsplan!"));
199
	   return;
200
	}
201
 
202
	// Als erstes befindet sich die Struktur mit den Parametern und
203
	// Summenergebnissen in der Datei.
204
	read(tmpFile.handle(), &TpPars, sizeof(TPPARS));
205
	// Diese schreiben wir als erstes in das Clipboard
206
	zeile = QString("Auszahlungsbetrag:\t%1\n").arg(PointNumber(TpPars.rahmen, 2, &hv0[0]));
207
	date_int(&day, &mon, &year, TpPars.ragab);
208
	str.sprintf("Auszahlung am:\t%02d.%02d.%d\n", day, mon, year);
209
	zeile.append(str);
210
	str.sprintf("Zinssatz Soll:\t%s\n\n", PointNumber(TpPars.zssoll, 3, &hv0[0]));
211
	zeile.append(str);
212
 
213
	// Nun lesen wir den Ratenplan aus und schreiben das Ergebnis in das
214
	// Clipboard
215
	// Überschrift
216
	zeile.append("Datum\tText\tKapital\tTilgung\tRate\tZinsen\tRestkapital\n");
217
	// Loop
218
	line = 1;
219
 
220
	while (read (tmpFile.handle(), &dTable, sizeof(DTABLE)) >= (int)sizeof(DTABLE))
221
	{
222
	      date_int(&day, &mon, &year, dTable.datum);
223
 
224
	      if (dTable.kz != 'E')
225
		 str.sprintf("%02d.%02d.%d\t", day, mon, year);
226
	      else
227
		 str.sprintf("Raten: %ld\t", dTable.datum);
228
 
229
	      zeile.append(str);
230
 
231
	      switch (dTable.kz)
232
	      {
233
		 case 'A': zeile.append("Abschluss\t"); break;
234
		 case 'R': zeile.append("Rate\t"); break;
235
		 case 'Z':
236
		    str = QString("Zinssatzänderung auf %1\n").arg(dTable.rate, 0, 'f', 3);
237
		    zeile.append(str);
238
		 break;
239
		 case 'E': zeile.append("Ergebnis\t"); break;
240
		 default:
241
		    str = QString("??? <%1>\t").arg(dTable.kz);
242
		    zeile.append(str);
243
	      }
244
 
245
	      if (dTable.kz != 'Z')
246
	      {
247
		 str = QString("%1\t").arg(PointNumber(dTable.kapital, 2, &hv0[0]));
248
		 zeile.append(str);
249
		 str = QString("%1\t").arg(PointNumber(dTable.tilg, 2, &hv0[0]));
250
		 zeile.append(str);
251
		 str = QString("%1\t").arg(PointNumber(dTable.rate, 2, &hv0[0]));
252
		 zeile.append(str);
253
		 str = QString("%1\t").arg(PointNumber(dTable.zinsen, 2, &hv0[0]));
254
		 zeile.append(str);
255
		 str = QString("%1\n").arg(PointNumber(dTable.rkapi, 2, &hv0[0]));
256
		 zeile.append(str);
257
	      }
258
	      else
259
	      {
260
		 str = QString("\t\t\t\t\n");
261
		 zeile.append(str);
262
	      }
263
	      line++;
264
	}
265
 
266
	tmpFile.close();
267
	cb->setText(zeile);
268
	textLabel_Status->setText(i18n("Ratenplan wurde in Zwischenablage kopiert"));
269
}
270
 
271
void ratenplanWidget::pbSaveSlot()
272
{
273
}
274
 
275
 
61 andreas 276
#include "ratenplanwidget.moc"
277