File indexing completed on 2024-06-16 04:46:58

0001 /*
0002     SPDX-FileCopyrightText: 2014-2015 Christian Dávid <christian-david@web.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "ibanbicitemedit.h"
0007 #include "ui_ibanbicitemedit.h"
0008 
0009 #include "payeeidentifier/ibanbic/ibanbic.h"
0010 #include "payeeidentifier/payeeidentifiertyped.h"
0011 
0012 struct ibanBicItemEdit::Private {
0013     Ui::ibanBicItemEdit* ui;
0014     payeeIdentifier m_identifier;
0015 };
0016 
0017 ibanBicItemEdit::ibanBicItemEdit(QWidget* parent)
0018     : QWidget(parent),
0019       d(new Private)
0020 {
0021     d->ui = new Ui::ibanBicItemEdit;
0022     d->ui->setupUi(this);
0023     setFocusProxy(d->ui->ibanEdit);
0024 
0025     connect(d->ui->ibanEdit, &KIbanLineEdit::textChanged, this, &ibanBicItemEdit::updateIdentifier);
0026     connect(d->ui->bicEdit, &KBicEdit::textChanged, this, &ibanBicItemEdit::updateIdentifier);
0027 
0028     connect(d->ui->ibanEdit, &KIbanLineEdit::textChanged, this, &ibanBicItemEdit::ibanChanged);
0029     connect(d->ui->bicEdit, &KBicEdit::textChanged, this, &ibanBicItemEdit::bicChanged);
0030 
0031     connect(d->ui->ibanEdit, &KIbanLineEdit::returnKeyPressed, this, &ibanBicItemEdit::editFinished);
0032     connect(d->ui->bicEdit, &KBicEdit::returnKeyPressed, this, &ibanBicItemEdit::editFinished);
0033 }
0034 
0035 void ibanBicItemEdit::editFinished()
0036 {
0037     Q_EMIT commitData(this);
0038     Q_EMIT closeEditor(this);
0039 }
0040 
0041 payeeIdentifier ibanBicItemEdit::identifier() const
0042 {
0043     return d->m_identifier;
0044 }
0045 
0046 QString ibanBicItemEdit::bic() const
0047 {
0048     return d->ui->bicEdit->text();
0049 }
0050 
0051 QString ibanBicItemEdit::iban() const
0052 {
0053     return d->ui->ibanEdit->text();
0054 }
0055 
0056 void ibanBicItemEdit::setIdentifier(const payeeIdentifier& ident)
0057 {
0058     try {
0059         payeeIdentifierTyped<payeeIdentifiers::ibanBic> identTyped(ident);
0060         d->ui->bicEdit->setText(identTyped->storedBic());
0061         d->ui->ibanEdit->setText(identTyped->paperformatIban());
0062         d->m_identifier = ident;
0063     } catch (const payeeIdentifier::empty &) {
0064     } catch (const payeeIdentifier::badCast &) {
0065     }
0066 }
0067 
0068 void ibanBicItemEdit::setBic(const QString& bic)
0069 {
0070     d->ui->bicEdit->setText(bic);
0071 }
0072 
0073 void ibanBicItemEdit::setIban(const QString& iban)
0074 {
0075     d->ui->ibanEdit->setText(payeeIdentifiers::ibanBic::ibanToPaperformat(iban));
0076 }
0077 
0078 void ibanBicItemEdit::updateIdentifier()
0079 {
0080     if (d->m_identifier.isNull())
0081         d->m_identifier = payeeIdentifier(d->m_identifier.id(), new payeeIdentifiers::ibanBic);
0082 
0083     const QString iban = payeeIdentifiers::ibanBic::ibanToElectronic(d->ui->ibanEdit->text());
0084     const QString bic = d->ui->bicEdit->text();
0085     bool changed = false;
0086 
0087     payeeIdentifierTyped<payeeIdentifiers::ibanBic> ident(d->m_identifier);
0088     if (ident->storedBic() != bic) {
0089         ident->setBic(bic);
0090         changed = true;
0091     }
0092 
0093     if (ident->electronicIban() != iban) {
0094         ident->setElectronicIban(iban);
0095         changed = true;
0096     }
0097     d->m_identifier = ident;
0098 
0099     if (changed) {
0100         Q_EMIT identifierChanged(d->m_identifier);
0101         Q_EMIT commitData(this);
0102     }
0103 }