1 /*
2  * Copyright 2000-2004  Michael Edwardes <mte@users.sourceforge.net>
3  * Copyright 2017-2018  Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of
8  * the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #include "editpersonaldatadlg.h"
20 
21 // ----------------------------------------------------------------------------
22 // QT Includes
23 
24 #include <QPushButton>
25 
26 // ----------------------------------------------------------------------------
27 // KDE Headers
28 
29 #include <KMessageBox>
30 #include <KLocalizedString>
31 
32 // ----------------------------------------------------------------------------
33 // Project Includes
34 #include "mymoneycontact.h"
35 #include "ui_editpersonaldatadlg.h"
36 
37 class EditPersonalDataDlgPrivate
38 {
39   Q_DISABLE_COPY(EditPersonalDataDlgPrivate)
40   Q_DECLARE_PUBLIC(EditPersonalDataDlg)
41 
42 public:
EditPersonalDataDlgPrivate(EditPersonalDataDlg * qq)43   explicit EditPersonalDataDlgPrivate(EditPersonalDataDlg *qq) :
44     q_ptr(qq),
45     ui(new Ui::EditPersonalDataDlg),
46     m_contact(nullptr)
47   {
48   }
49 
~EditPersonalDataDlgPrivate()50   ~EditPersonalDataDlgPrivate()
51   {
52     delete m_contact;
53     delete ui;
54   }
55 
init(const QString & title)56   void init(const QString& title)
57   {
58     Q_Q(EditPersonalDataDlg);
59     m_contact = new MyMoneyContact(q);
60     ui->setupUi(q);
61     q->setModal(true);
62 
63     if (!title.isEmpty())
64       q->setWindowTitle(title);
65 
66     ui->kabcBtn->setEnabled(m_contact->ownerExists());
67     ui->userNameEdit->setFocus();
68 
69     q->connect(ui->buttonBox, &QDialogButtonBox::rejected, q, &QDialog::reject);
70     q->connect(ui->buttonBox, &QDialogButtonBox::accepted, q, &EditPersonalDataDlg::okClicked);
71     q->connect(ui->kabcBtn, &QAbstractButton::clicked, q, &EditPersonalDataDlg::loadFromAddressBook);
72   }
73 
74   EditPersonalDataDlg      *q_ptr;
75   Ui::EditPersonalDataDlg  *ui;
76   MyMoneyContact           *m_contact;
77   QString                   userNameText;
78   QString                   userStreetText;
79   QString                   userTownText;
80   QString                   userCountyText;
81   QString                   userPostcodeText;
82   QString                   userTelephoneText;
83   QString                   userEmailText;
84 };
85 
86 
EditPersonalDataDlg(QWidget * parent,const QString & title)87 EditPersonalDataDlg::EditPersonalDataDlg(QWidget *parent, const QString& title) :
88   QDialog(parent),
89   d_ptr(new EditPersonalDataDlgPrivate(this))
90 {
91   Q_D(EditPersonalDataDlg);
92   d->init(title);
93 }
94 
EditPersonalDataDlg(QString userName,QString userStreet,QString userTown,QString userCounty,QString userPostcode,QString userTelephone,QString userEmail,QWidget * parent,const QString & title)95 EditPersonalDataDlg::EditPersonalDataDlg(QString userName,
96                                          QString userStreet,
97                                          QString userTown,
98                                          QString userCounty,
99                                          QString userPostcode,
100                                          QString userTelephone,
101                                          QString userEmail,
102                                          QWidget *parent,
103                                          const QString& title) :
104   QDialog(parent),
105   d_ptr(new EditPersonalDataDlgPrivate(this))
106 {
107   Q_D(EditPersonalDataDlg);
108   d->init(title);
109   d->ui->userNameEdit->setText(userName);
110   d->ui->streetEdit->setText(userStreet);
111   d->ui->townEdit->setText(userTown);
112   d->ui->countyEdit->setText(userCounty);
113   d->ui->postcodeEdit->setText(userPostcode);
114   d->ui->telephoneEdit->setText(userTelephone);
115   d->ui->emailEdit->setText(userEmail);
116 }
117 
userName() const118 QString EditPersonalDataDlg::userName() const
119 {
120   Q_D(const EditPersonalDataDlg);
121   return d->userNameText;
122 }
123 
userStreet() const124 QString EditPersonalDataDlg::userStreet() const
125 {
126   Q_D(const EditPersonalDataDlg);
127   return d->userStreetText;
128 }
129 
userTown() const130 QString EditPersonalDataDlg::userTown() const
131 {
132   Q_D(const EditPersonalDataDlg);
133   return d->userTownText;
134 }
135 
userCountry() const136 QString EditPersonalDataDlg::userCountry() const
137 {
138   Q_D(const EditPersonalDataDlg);
139   return d->userCountyText;
140 }
141 
userPostcode() const142 QString EditPersonalDataDlg::userPostcode() const
143 {
144   Q_D(const EditPersonalDataDlg);
145   return d->userPostcodeText;
146 }
147 
userTelephone() const148 QString EditPersonalDataDlg::userTelephone() const
149 {
150   Q_D(const EditPersonalDataDlg);
151   return d->userTelephoneText;
152 }
153 
userEmail() const154 QString EditPersonalDataDlg::userEmail() const
155 {
156   Q_D(const EditPersonalDataDlg);
157   return d->userEmailText;
158 }
159 
~EditPersonalDataDlg()160 EditPersonalDataDlg::~EditPersonalDataDlg()
161 {
162   Q_D(EditPersonalDataDlg);
163   delete d;
164 }
165 
okClicked()166 void EditPersonalDataDlg::okClicked()
167 {
168   Q_D(EditPersonalDataDlg);
169   d->userNameText = d->ui->userNameEdit->text();
170   d->userStreetText = d->ui->streetEdit->text();
171   d->userTownText = d->ui->townEdit->text();
172   d->userCountyText = d->ui->countyEdit->text();
173   d->userPostcodeText = d->ui->postcodeEdit->text();
174   d->userTelephoneText = d->ui->telephoneEdit->text();
175   d->userEmailText = d->ui->emailEdit->text();
176 
177   accept();
178 }
179 
loadFromAddressBook()180 void EditPersonalDataDlg::loadFromAddressBook()
181 {
182   Q_D(EditPersonalDataDlg);
183   d->ui->userNameEdit->setText(d->m_contact->ownerFullName());
184   d->ui->emailEdit->setText(d->m_contact->ownerEmail());
185   if (d->ui->emailEdit->text().isEmpty()) {
186     KMessageBox::sorry(this, i18n("Unable to load data, because no contact has been associated with the owner of the standard address book."), i18n("Address book import"));
187     return;
188   }
189   d->ui->kabcBtn->setEnabled(false);
190   connect(d->m_contact, &MyMoneyContact::contactFetched, this, &EditPersonalDataDlg::slotContactFetched);
191   d->m_contact->fetchContact(d->ui->emailEdit->text());
192 }
193 
slotContactFetched(const ContactData & identity)194 void EditPersonalDataDlg::slotContactFetched(const ContactData &identity)
195 {
196   Q_D(EditPersonalDataDlg);
197   d->ui->telephoneEdit->setText(identity.phoneNumber);
198   QString sep;
199   if (!identity.country.isEmpty() && !identity.region.isEmpty())
200     sep = " / ";
201   d->ui->countyEdit->setText(QString("%1%2%3").arg(identity.country, sep, identity.region));
202   d->ui->postcodeEdit->setText(identity.postalCode);
203   d->ui->townEdit->setText(identity.locality);
204   d->ui->streetEdit->setText(identity.street);
205   d->ui->kabcBtn->setEnabled(true);
206 }
207 
208