File indexing completed on 2024-06-16 04:47:21

0001 /***************************************************************************
0002  * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0003  * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  ***************************************************************************/
0006 #ifndef SKGIMPORTPLUGINKMY_H
0007 #define SKGIMPORTPLUGINKMY_H
0008 /** @file
0009 * This file is Skrooge plugin for KMY import / export.
0010 *
0011 * @author Stephane MANKOWSKI / Guillaume DE BURE
0012 */
0013 #include <qset.h>
0014 
0015 #include "skgbankobject.h"
0016 #include "skgimportplugin.h"
0017 
0018 class SKGUnitObject;
0019 class SKGAccountObject;
0020 class SKGCategoryObject;
0021 class SKGOperationObject;
0022 class SKGPayeeObject;
0023 class SKGObjectBase;
0024 class QDomDocument;
0025 class QDomElement;
0026 
0027 /**
0028  * This file is Skrooge plugin for KMY import / export.
0029  */
0030 class SKGImportPluginKmy : public SKGImportPlugin
0031 {
0032     Q_OBJECT
0033     Q_INTERFACES(SKGImportPlugin)
0034 
0035 public:
0036     /**
0037      * Default constructor
0038      * @param iImporter the parent importer
0039      * @param iArg the arguments
0040      */
0041     explicit SKGImportPluginKmy(QObject* iImporter, const QVariantList& iArg);
0042 
0043     /**
0044      * Default Destructor
0045      */
0046     ~SKGImportPluginKmy() override;
0047 
0048     /**
0049      * To know if import is possible with this plugin
0050      */
0051     bool isImportPossible() override;
0052 
0053     /**
0054      * Import a file
0055      * @return an object managing the error.
0056      *   @see SKGError
0057      */
0058     SKGError importFile() override;
0059 
0060     /**
0061      * To know if export is possible with this plugin
0062      * @return true or false
0063      */
0064     bool isExportPossible() override;
0065 
0066 
0067     /**
0068      * Export a file
0069      * @return an object managing the error.
0070      *   @see SKGError
0071      */
0072     SKGError exportFile() override;
0073 
0074     /**
0075      * Return the mime type filter
0076      * @return the mime type filter. Example: "*.csv|CSV file"
0077      */
0078     QString getMimeTypeFilter() const override;
0079 
0080 private:
0081     Q_DISABLE_COPY(SKGImportPluginKmy)
0082 
0083     SKGError importSecurities(QDomElement& docElem);
0084     SKGError importPrices(QDomElement& docElem);
0085     SKGError importInstitutions(QMap<QString, SKGBankObject>& mapIdBank, QDomElement& docElem);
0086     SKGError importPayees(QMap<QString, SKGPayeeObject>& mapIdPayee, QDomElement& docElem);
0087     SKGError importTransactions(QDomElement& docElem, SKGAccountObject& kmymoneyTemporaryAccount, QMap<QString, SKGPayeeObject>& mapIdPayee);
0088     SKGError importBudget(QDomElement& docElem);
0089     SKGError importAccounts(SKGBankObject& bank, SKGAccountObject& kmymoneyTemporaryAccount, QMap<QString, SKGBankObject>& mapIdBank, QDomElement& docElem);
0090     SKGError exportHeader(QDomDocument& doc, QDomElement& root);
0091     SKGError exportSecurities(QDomDocument& doc, QDomElement& root, const QString& stdUnit);
0092     SKGError exportBudgets(QDomDocument& doc, QDomElement& root);
0093     SKGError exportTransactions(QDomDocument& doc, QDomElement& root, const QString& stdUnit);
0094     SKGError exportPayees(QDomDocument& doc, QDomElement& root);
0095     SKGError exportSchedules(QDomDocument& doc, QDomElement& root);
0096     SKGError exportInstitutions(QDomDocument& doc, QDomElement& root);
0097     SKGError exportCategories(QDomDocument& doc, QDomElement& accounts, const QString& stdUnit, QDomElement& accountIncome, QDomElement& accountExpense, int nbAccount);
0098     SKGError exportAccounts(QDomDocument& doc, QDomElement& root, const QString& stdUnit, QDomElement& accounts, QDomElement& accountIncome, QDomElement& accountExpense, int& nbAccounts);
0099 
0100 
0101     static SKGError exportOperation(const SKGOperationObject& iOperation, QDomDocument& iDoc, QDomElement& iTransaction);
0102     static QString kmyValue(double iValue);
0103     static double toKmyValue(const QString& iString);
0104 
0105     static QString getKmyUniqueIdentifier(const SKGObjectBase& iObject);
0106 
0107     static QSet<QString>  m_opTreated;
0108     static QMap<QString, SKGUnitObject> m_mapIdUnit;
0109     static QMap<QString, SKGAccountObject> m_mapIdAccount;
0110     static QMap<QString, SKGCategoryObject> m_mapIdCategory;
0111     static QMap<QString, SKGPayeeObject> m_mapIdPayee;
0112 };
0113 
0114 #endif  // SKGIMPORTPLUGINKMY_H