File indexing completed on 2024-05-12 05:06:45

0001 /*
0002     SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "mymoneytemplate.h"
0007 
0008 // ----------------------------------------------------------------------------
0009 // QT Includes
0010 
0011 #include <QFile>
0012 #include <QUrl>
0013 #include <QMap>
0014 #include <QDomDocument>
0015 #include <QDomNode>
0016 #include <QDebug>
0017 
0018 // ----------------------------------------------------------------------------
0019 // KDE Includes
0020 
0021 #include <KLocalizedString>
0022 
0023 // ----------------------------------------------------------------------------
0024 // Project Includes
0025 
0026 #if 0
0027 #include "kmymoneyutils.h"
0028 #include "mymoneyfile.h"
0029 #include "mymoneyaccount.h"
0030 #include "mymoneyexception.h"
0031 #include "mymoneyenums.h"
0032 #endif
0033 #include "mymoneyobject_p.h"
0034 
0035 bool MyMoneyTemplateLoadResult::isOK() const
0036 {
0037     return (errorLine == -1) && (errorColumn == -1);
0038 }
0039 
0040 void MyMoneyTemplateLoadResult::setErrorMsg(const QString& msg)
0041 {
0042     errorMsg = msg;
0043     // make sure isOK() returns false
0044     if (isOK()) {
0045         errorLine = 0;
0046         errorColumn = 0;
0047     }
0048 }
0049 
0050 class MyMoneyTemplatePrivate : public MyMoneyObjectPrivate
0051 {
0052 public:
0053     MyMoneyTemplatePrivate() {}
0054 
0055     QDomDocument          m_doc;
0056     QDomNode              m_accounts;
0057     QString               m_title;
0058     QString               m_shortDesc;
0059     QString               m_longDesc;
0060     QString               m_locale;
0061     QUrl                  m_source;
0062     QMap<QString,QString> m_vatAccountMap;
0063 
0064     void collectReferencedObjects() override
0065     {
0066     }
0067 
0068     MyMoneyTemplateLoadResult loadDescription()
0069     {
0070         MyMoneyTemplateLoadResult result;
0071         int validMask = 0x00;
0072         const int validAccount = 0x01;
0073         const int validTitle = 0x02;
0074         const int validShort = 0x04;
0075         const int validLong = 0x08;
0076         const int invalid = 0x10;
0077         const int validHeader = 0x0F;
0078 
0079         QDomElement rootElement = m_doc.documentElement();
0080         if (!rootElement.isNull()
0081                 && rootElement.tagName() == QLatin1String("kmymoney-account-template")) {
0082             QDomNode child = rootElement.firstChild();
0083             while (!child.isNull() && child.isElement()) {
0084                 QDomElement childElement = child.toElement();
0085                 // qDebug("MyMoneyTemplate::import: Processing child node %s", childElement.tagName().data());
0086                 if (childElement.tagName() == QLatin1String("accounts")) {
0087                     m_accounts = childElement.firstChild();
0088                     validMask |= validAccount;
0089                 } else if (childElement.tagName() == QLatin1String("title")) {
0090                     m_title = childElement.text();
0091                     validMask |= validTitle;
0092                 } else if (childElement.tagName() == QLatin1String("shortdesc")) {
0093                     m_shortDesc = childElement.text();
0094                     validMask |= validShort;
0095                 } else if (childElement.tagName() == QLatin1String("longdesc")) {
0096                     m_longDesc = childElement.text();
0097                     validMask |= validLong;
0098                 } else {
0099                     result.setErrorMsg(i18n("<p>Invalid tag <b>%1</b> in template file <b>%2</b></p>", childElement.tagName(), m_source.toDisplayString()));
0100                     validMask |= invalid;
0101                 }
0102                 child = child.nextSibling();
0103             }
0104             if (validMask != validHeader) {
0105                 if (!(validMask & validAccount)) {
0106                     result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("accounts"), m_source.toDisplayString()));
0107                 } else if (!(validMask & validTitle)) {
0108                     result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("title"), m_source.toDisplayString()));
0109                 } else if (!(validMask & validShort)) {
0110                     result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("shortdesc"), m_source.toDisplayString()));
0111                 } else if (!(validMask & validLong)) {
0112                     result.setErrorMsg(i18n("<p>Missing tag <b>%1</b> in template file <b>%2</b></p>", QLatin1String("longdesc"), m_source.toDisplayString()));
0113                 }
0114             }
0115         } else {
0116             result.setErrorMsg(i18n("<p>Invalid root element in template file <b>%1</b></p>", m_source.toDisplayString()));
0117         }
0118         return result;
0119     }
0120 };
0121 
0122 
0123 MyMoneyTemplate::MyMoneyTemplate()
0124     : MyMoneyObject(*(new MyMoneyTemplatePrivate))
0125 {
0126 }
0127 
0128 MyMoneyTemplate::MyMoneyTemplate(const QString& id, const MyMoneyTemplate& other)
0129     : MyMoneyObject(*new MyMoneyTemplatePrivate(*other.d_func()), id)
0130 {
0131 }
0132 
0133 MyMoneyTemplate::MyMoneyTemplate(const MyMoneyTemplate& other)
0134     : MyMoneyObject(*new MyMoneyTemplatePrivate(*other.d_func()), other.id())
0135 {
0136 }
0137 
0138 MyMoneyTemplate::~MyMoneyTemplate()
0139 {
0140 }
0141 
0142 MyMoneyTemplateLoadResult MyMoneyTemplate::setAccountTree(QFile* file)
0143 {
0144     Q_D(MyMoneyTemplate);
0145     MyMoneyTemplateLoadResult result;
0146     d->m_doc.setContent(file, &result.errorMsg, &result.errorLine, &result.errorColumn);
0147     if (result.isOK()) {
0148         result = d->loadDescription();
0149     }
0150     return result;
0151 }
0152 
0153 const QDomNode& MyMoneyTemplate::accountTree() const
0154 {
0155     Q_D(const MyMoneyTemplate);
0156     return d->m_accounts;
0157 }
0158 
0159 const QString& MyMoneyTemplate::title() const
0160 {
0161     Q_D(const MyMoneyTemplate);
0162     return d->m_title;
0163 }
0164 
0165 const QString& MyMoneyTemplate::shortDescription() const
0166 {
0167     Q_D(const MyMoneyTemplate);
0168     return d->m_shortDesc;
0169 }
0170 
0171 const QString& MyMoneyTemplate::longDescription() const
0172 {
0173     Q_D(const MyMoneyTemplate);
0174     return d->m_longDesc;
0175 }
0176 
0177 const QString& MyMoneyTemplate::locale() const
0178 {
0179     Q_D(const MyMoneyTemplate);
0180     return d->m_locale;
0181 }
0182 
0183 const QUrl& MyMoneyTemplate::source() const
0184 {
0185     Q_D(const MyMoneyTemplate);
0186     return d->m_source;
0187 }
0188 
0189 void MyMoneyTemplate::setTitle(const QString &s)
0190 {
0191     Q_D(MyMoneyTemplate);
0192     d->m_title = s;
0193 }
0194 
0195 void MyMoneyTemplate::setShortDescription(const QString &s)
0196 {
0197     Q_D(MyMoneyTemplate);
0198     d->m_shortDesc = s;
0199 }
0200 
0201 void MyMoneyTemplate::setLongDescription(const QString &s)
0202 {
0203     Q_D(MyMoneyTemplate);
0204     d->m_longDesc = s;
0205 }
0206 
0207 void MyMoneyTemplate::setLocale(const QString& s)
0208 {
0209     Q_D(MyMoneyTemplate);
0210     d->m_locale = s;
0211 }
0212 
0213 void MyMoneyTemplate::setSource(const QUrl& s)
0214 {
0215     Q_D(MyMoneyTemplate);
0216     d->m_source = s;
0217 }