Mercurial > hg > syntilista
comparison src/editperson.cpp @ 237:54ab3f3e28c0
Split EditPerson and ViewTransactions to separate source files.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 07 May 2018 19:19:13 +0300 |
parents | |
children | 43a5e09bb832 |
comparison
equal
deleted
inserted
replaced
236:2e0fcb3d0b95 | 237:54ab3f3e28c0 |
---|---|
1 // | |
2 // Syntilista - debt list/management database program | |
3 // Programmed and designed by Matti Hämäläinen <ccr@tnsp.org> | |
4 // (C) Copyright 2017-2018 Tecnic Software productions (TNSP) | |
5 // | |
6 // Distributed under 3-clause BSD style license, refer to | |
7 // included file "COPYING" for exact terms. | |
8 // | |
9 #include "main.h" | |
10 #include "ui_editperson.h" | |
11 | |
12 | |
13 EditPerson::EditPerson(QWidget *parent) : | |
14 QDialog(parent), | |
15 ui(new Ui::EditPerson) | |
16 { | |
17 ui->setupUi(this); | |
18 | |
19 slSetCommonStyleSheet(this); | |
20 | |
21 setModal(true); | |
22 setAttribute(Qt::WA_DeleteOnClose); | |
23 show(); | |
24 activateWindow(); | |
25 raise(); | |
26 setFocus(); | |
27 | |
28 model_Transactions = new SLTransactionSQLModel(); | |
29 ui->tableview_Transactions->setModel(model_Transactions); | |
30 ui->tableview_Transactions->setItemDelegate(new QSqlRelationalDelegate(ui->tableview_Transactions)); | |
31 ui->tableview_Transactions->verticalHeader()->setVisible(false); | |
32 ui->tableview_Transactions->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); | |
33 | |
34 ui->edit_FirstName->setMaxLength(SQL_LEN_FIRST_NAME); | |
35 ui->edit_LastName->setMaxLength(SQL_LEN_LAST_NAME); | |
36 | |
37 connect( | |
38 ui->textedit_ExtraInfo, | |
39 SIGNAL(textChanged()), | |
40 this, | |
41 SLOT(on_textedit_ExtraInfo_textChanged())); | |
42 | |
43 validateForm(); | |
44 } | |
45 | |
46 | |
47 EditPerson::~EditPerson() | |
48 { | |
49 delete ui; | |
50 delete model_Transactions; | |
51 } | |
52 | |
53 | |
54 void EditPerson::statusMsg(const QString &msg) | |
55 { | |
56 // Pass the status message to main window | |
57 dynamic_cast<SyntilistaMainWindow *>(parent())->statusMsg(msg); | |
58 } | |
59 | |
60 | |
61 bool EditPerson::validateForm() | |
62 { | |
63 selPerson.firstName = slCleanupStr(ui->edit_FirstName->text()); | |
64 selPerson.lastName = slCleanupStr(ui->edit_LastName->text()); | |
65 selPerson.extraInfo = ui->textedit_ExtraInfo->document()->toPlainText(); | |
66 bool extraInfoValid = selPerson.extraInfo.length() < SQL_LEN_EXTRA_INFO; | |
67 | |
68 ui->textedit_ExtraInfo->setStyleSheet(!extraInfoValid ? "background-color: red;" : NULL); | |
69 ui->edit_FirstName->setStyleSheet(selPerson.firstName == "" ? "background-color: red;" : NULL); | |
70 ui->edit_LastName->setStyleSheet(selPerson.lastName == "" ? "background-color: red;" : NULL); | |
71 | |
72 return selPerson.firstName != "" && selPerson.lastName != "" && extraInfoValid; | |
73 } | |
74 | |
75 | |
76 void EditPerson::on_button_Cancel_clicked() | |
77 { | |
78 close(); | |
79 } | |
80 | |
81 | |
82 void EditPerson::on_button_OK_clicked() | |
83 { | |
84 // | |
85 // Check form validation | |
86 // | |
87 if (!validateForm()) | |
88 { | |
89 slErrorMsg( | |
90 tr("Virhe!"), | |
91 tr("Vaaditut kentät (etunimi, sukunimi) eivät ole täytetty tai lisätietojen pituus on liian suuri.")); | |
92 | |
93 return; | |
94 } | |
95 | |
96 if (selPerson.id >= 0) | |
97 { | |
98 // | |
99 // We are in update/edit person mode, thus we check if the | |
100 // first/last name have changed and if there is someone with | |
101 // different ID and same names. | |
102 // | |
103 QSqlQuery person; | |
104 person.prepare(QStringLiteral("SELECT * FROM people WHERE id <> ? AND first_name=? AND last_name=?")); | |
105 person.addBindValue(selPerson.id); | |
106 person.addBindValue(selPerson.firstName); | |
107 person.addBindValue(selPerson.lastName); | |
108 person.exec(); | |
109 | |
110 slCheckAndReportSQLError("SELECT check for existing person by same name (UPDATE)", person.lastError()); | |
111 | |
112 if (person.next()) | |
113 { | |
114 // There exists another person with that name | |
115 slErrorMsg( | |
116 tr("Virhe!"), | |
117 tr("Ei pysty! Samalla nimellä '%1 %2' on olemassa jo henkilö!"). | |
118 arg(selPerson.firstName).arg(selPerson.lastName)); | |
119 return; | |
120 } | |
121 | |
122 // Allest klar, update the person data | |
123 dynamic_cast<SyntilistaMainWindow *>(parent())->model_People->updatePerson(selPerson); | |
124 dynamic_cast<SyntilistaMainWindow *>(parent())->setActivePerson(selPerson.id); | |
125 | |
126 statusMsg(tr("Päivitettiin henkilö '%1 %2' (#%3)."). | |
127 arg(selPerson.firstName).arg(selPerson.lastName).arg(selPerson.id)); | |
128 } | |
129 else | |
130 { | |
131 // | |
132 // We are in "add new person" mode, check if there exists | |
133 // someone with same first+last name. | |
134 // | |
135 QSqlQuery person; | |
136 person.prepare("SELECT * FROM people WHERE first_name=? AND last_name=?"); | |
137 person.addBindValue(selPerson.firstName); | |
138 person.addBindValue(selPerson.lastName); | |
139 person.exec(); | |
140 | |
141 slCheckAndReportSQLError("SELECT check for existing person by same name (ADD)", person.lastError()); | |
142 | |
143 if (person.next()) | |
144 { | |
145 // There exists a record with same name | |
146 slErrorMsg( | |
147 tr("Virhe!"), | |
148 tr("Ei pysty! Samalla nimellä '%1 %2' on olemassa jo henkilö!"). | |
149 arg(selPerson.firstName).arg(selPerson.lastName)); | |
150 | |
151 return; | |
152 } | |
153 | |
154 // Attempt to add a person | |
155 qint64 nid = dynamic_cast<SyntilistaMainWindow *>(parent())->model_People->addPerson(selPerson); | |
156 if (nid < 0) | |
157 { | |
158 slErrorMsg( | |
159 tr("Virhe!"), | |
160 tr("Tietokannan käsittelyssä tapahtui virhe (#%1)."). | |
161 arg(nid)); | |
162 } | |
163 else | |
164 { | |
165 dynamic_cast<SyntilistaMainWindow *>(parent())->updatePersonList(); | |
166 dynamic_cast<SyntilistaMainWindow *>(parent())->setActivePerson(nid); | |
167 dynamic_cast<SyntilistaMainWindow *>(parent())->focusDebtEdit(); | |
168 | |
169 statusMsg(tr("Lisättiin uusi henkilö '%1 %2'."). | |
170 arg(selPerson.firstName).arg(selPerson.lastName)); | |
171 } | |
172 } | |
173 | |
174 close(); | |
175 } | |
176 | |
177 | |
178 void EditPerson::on_edit_FirstName_textChanged(const QString &arg1) | |
179 { | |
180 (void) arg1; | |
181 validateForm(); | |
182 } | |
183 | |
184 | |
185 void EditPerson::on_edit_LastName_textChanged(const QString &arg1) | |
186 { | |
187 (void) arg1; | |
188 validateForm(); | |
189 } | |
190 | |
191 | |
192 void EditPerson::on_textedit_ExtraInfo_textChanged() | |
193 { | |
194 validateForm(); | |
195 } | |
196 | |
197 | |
198 void EditPerson::clearForm() | |
199 { | |
200 ui->edit_FirstName->clear(); | |
201 ui->edit_LastName->clear(); | |
202 ui->textedit_ExtraInfo->document()->clear(); | |
203 ui->edit_FirstName->setFocus(); | |
204 } | |
205 | |
206 | |
207 // | |
208 // Set the person to be edited | |
209 // | |
210 void EditPerson::setPerson(qint64 id) | |
211 { | |
212 selPerson.id = id; | |
213 | |
214 if (id >= 0) | |
215 { | |
216 SLPersonInfo pinfo; | |
217 if (!slGetPersonInfo(id, pinfo)) | |
218 { | |
219 statusMsg(tr("Virhe! Ei henkilöä ID:llä #%1").arg(id)); | |
220 // Intentional fall-through below | |
221 } | |
222 else | |
223 { | |
224 ui->edit_FirstName->setText(pinfo.firstName); | |
225 ui->edit_LastName->setText(pinfo.lastName); | |
226 ui->textedit_ExtraInfo->document()->setPlainText(pinfo.extraInfo); | |
227 ui->label_AddedValue->setText(slDateTimeToStr(pinfo.added)); | |
228 | |
229 QSqlQuery query; | |
230 query.prepare(QStringLiteral("SELECT id,value,added FROM transactions WHERE person=? ORDER BY added DESC")); | |
231 query.addBindValue(pinfo.id); | |
232 query.exec(); | |
233 slCheckAndReportSQLError("SELECT transactions for tableview_Transactions", query.lastError()); | |
234 | |
235 model_Transactions->setQuery(query); | |
236 | |
237 model_Transactions->setHeaderData(0, Qt::Horizontal, tr("ID")); | |
238 model_Transactions->setHeaderData(1, Qt::Horizontal, tr("Summa")); | |
239 model_Transactions->setHeaderData(2, Qt::Horizontal, tr("Aika")); | |
240 | |
241 ui->tableview_Transactions->setModel(model_Transactions); | |
242 ui->tableview_Transactions->setColumnHidden(0, true); | |
243 | |
244 return; // Ugly | |
245 } | |
246 } | |
247 | |
248 // In case of id < 0 or errors .. | |
249 clearForm(); | |
250 ui->tableview_Transactions->setModel(NULL); | |
251 } |