File indexing completed on 2024-05-12 16:42:38

0001 /*
0002     SPDX-FileCopyrightText: 2014-2016 Christian Dávid <christian-david@web.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "mymoneypayeeidentifiercontainer.h"
0007 
0008 #include <QDebug>
0009 
0010 #include "payeeidentifier/ibanbic/ibanbic.h"
0011 #include "payeeidentifier/nationalaccount/nationalaccount.h"
0012 #include "payeeidentifier/unavailableplugin/unavailableplugin.h"
0013 #include "payeeidentifier.h"
0014 
0015 MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer()
0016     : m_payeeIdentifiers(QList< ::payeeIdentifier >())
0017 {
0018 }
0019 
0020 unsigned int MyMoneyPayeeIdentifierContainer::payeeIdentifierCount() const
0021 {
0022     return m_payeeIdentifiers.count();
0023 }
0024 
0025 payeeIdentifier MyMoneyPayeeIdentifierContainer::payeeIdentifier(unsigned int index) const
0026 {
0027     return m_payeeIdentifiers.at(index);
0028 }
0029 
0030 QList<payeeIdentifier> MyMoneyPayeeIdentifierContainer::payeeIdentifiers() const
0031 {
0032     return m_payeeIdentifiers;
0033 }
0034 
0035 void MyMoneyPayeeIdentifierContainer::addPayeeIdentifier(const ::payeeIdentifier& ident)
0036 {
0037     m_payeeIdentifiers.append(ident);
0038 }
0039 
0040 void MyMoneyPayeeIdentifierContainer::addPayeeIdentifier(const unsigned int position, const ::payeeIdentifier& ident)
0041 {
0042     m_payeeIdentifiers.insert(position, ident);
0043 }
0044 
0045 void MyMoneyPayeeIdentifierContainer::removePayeeIdentifier(const ::payeeIdentifier& ident)
0046 {
0047     m_payeeIdentifiers.removeOne(ident);
0048 }
0049 
0050 void MyMoneyPayeeIdentifierContainer::removePayeeIdentifier(const int index)
0051 {
0052     Q_ASSERT(m_payeeIdentifiers.count() > index && index >= 0);
0053     m_payeeIdentifiers.removeAt(index);
0054 }
0055 
0056 void MyMoneyPayeeIdentifierContainer::modifyPayeeIdentifier(const ::payeeIdentifier& ident)
0057 {
0058     QList< ::payeeIdentifier >::Iterator end = m_payeeIdentifiers.end();
0059     for (QList< ::payeeIdentifier >::Iterator iter = m_payeeIdentifiers.begin(); iter != end; ++iter) {
0060         if (iter->id() == ident.id()) {
0061             *iter = ident;
0062             return;
0063         }
0064     }
0065 }
0066 
0067 void MyMoneyPayeeIdentifierContainer::modifyPayeeIdentifier(const int index, const ::payeeIdentifier& ident)
0068 {
0069     Q_ASSERT(m_payeeIdentifiers.count() > index && index >= 0);
0070     m_payeeIdentifiers[index] = ident;
0071 }
0072 
0073 void MyMoneyPayeeIdentifierContainer::resetPayeeIdentifiers(const QList< ::payeeIdentifier >& list)
0074 {
0075     m_payeeIdentifiers = list;
0076 }
0077 
0078 void MyMoneyPayeeIdentifierContainer::loadXML(QDomElement node)
0079 {
0080     // Load identifiers
0081     QDomNodeList identifierNodes = node.elementsByTagName("payeeIdentifier");
0082     const uint identifierNodesLength = identifierNodes.length();
0083     for (uint i = 0; i < identifierNodesLength; ++i) {
0084         const QDomElement element = identifierNodes.item(i).toElement();
0085 
0086         const auto payeeIdentifierId = element.attribute("type");
0087         payeeIdentifierData* identData;
0088         if (payeeIdentifierId == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()) {
0089             auto creator = new payeeIdentifiers::ibanBic();
0090             identData = creator->createFromXml(element);
0091             delete creator;
0092         } else if (payeeIdentifierId == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) {
0093             auto creator = new payeeIdentifiers::nationalAccount();
0094             identData = creator->createFromXml(element);
0095             delete creator;
0096         } else {
0097             identData = new payeeIdentifiers::payeeIdentifierUnavailable(element);
0098         }
0099         ::payeeIdentifier ident(identData);
0100         ident.m_id = element.attribute("id", 0).toUInt();
0101 
0102         if (ident.isNull()) {
0103             qWarning() << "Could not load payee identifier" << element.attribute("type", "*no pidid set*");
0104             continue;
0105         }
0106         addPayeeIdentifier(ident);
0107     }
0108 }
0109 
0110 void MyMoneyPayeeIdentifierContainer::writeXML(QDomDocument document, QDomElement parent) const
0111 {
0112     // Add payee identifiers
0113     foreach (const ::payeeIdentifier& ident, m_payeeIdentifiers) {
0114         if (!ident.isNull()) {
0115             ident.writeXML(document, parent);
0116         }
0117     }
0118 }