Subversion Repositories public

Rev

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