File indexing completed on 2024-06-16 04:47:32
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 /** @file 0007 * A skrooge plugin to track transactions 0008 * 0009 * @author Stephane MANKOWSKI 0010 */ 0011 #include "skgtrackerplugin.h" 0012 0013 #include <kaboutdata.h> 0014 #include <kactioncollection.h> 0015 #include <kpluginfactory.h> 0016 #include <kstandardaction.h> 0017 0018 #include "skgdocumentbank.h" 0019 #include "skgtraces.h" 0020 #include "skgtracker_settings.h" 0021 #include "skgtrackerpluginwidget.h" 0022 0023 /** 0024 * This plugin factory. 0025 */ 0026 K_PLUGIN_CLASS_WITH_JSON(SKGTrackerPlugin, "metadata.json") 0027 0028 SKGTrackerPlugin::SKGTrackerPlugin(QWidget* iWidget, QObject* iParent, const QVariantList& /*iArg*/) : SKGInterfacePlugin(iParent), m_currentBankDocument(nullptr) 0029 { 0030 Q_UNUSED(iWidget) 0031 SKGTRACEINFUNC(10) 0032 } 0033 0034 SKGTrackerPlugin::~SKGTrackerPlugin() 0035 { 0036 SKGTRACEINFUNC(10) 0037 m_currentBankDocument = nullptr; 0038 } 0039 0040 bool SKGTrackerPlugin::setupActions(SKGDocument* iDocument) 0041 { 0042 SKGTRACEINFUNC(10) 0043 0044 if (qobject_cast<SKGDocumentBank*>(iDocument) == nullptr) { 0045 return false; 0046 } 0047 0048 m_currentBankDocument = iDocument; 0049 0050 setComponentName(QStringLiteral("skrooge_tracker"), title()); 0051 setXMLFile(QStringLiteral("skrooge_tracker.rc")); 0052 0053 // Create yours actions here 0054 return true; 0055 } 0056 0057 SKGTabPage* SKGTrackerPlugin::getWidget() 0058 { 0059 SKGTRACEINFUNC(10) 0060 return new SKGTrackerPluginWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument); 0061 } 0062 0063 KConfigSkeleton* SKGTrackerPlugin::getPreferenceSkeleton() 0064 { 0065 return skgtracker_settings::self(); 0066 } 0067 0068 QString SKGTrackerPlugin::title() const 0069 { 0070 return i18nc("Noun, something that is used to track items", "Trackers"); 0071 } 0072 0073 QString SKGTrackerPlugin::icon() const 0074 { 0075 return QStringLiteral("crosshairs"); 0076 } 0077 0078 QString SKGTrackerPlugin::toolTip() const 0079 { 0080 return i18nc("A tool tip", "Trackers management"); 0081 } 0082 0083 int SKGTrackerPlugin::getOrder() const 0084 { 0085 return 25; 0086 } 0087 0088 QStringList SKGTrackerPlugin::tips() const 0089 { 0090 QStringList output; 0091 output.push_back(i18nc("Description of a tips", "<p>…you can follow your refunds by using a <a href=\"skg://skrooge_tracker_plugin\">tracker</a>.</p>")); 0092 return output; 0093 } 0094 0095 bool SKGTrackerPlugin::isInPagesChooser() const 0096 { 0097 return true; 0098 } 0099 0100 SKGAdviceList SKGTrackerPlugin::advice(const QStringList& iIgnoredAdvice) 0101 { 0102 SKGTRACEINFUNC(10) 0103 SKGAdviceList output; 0104 // Search old trackers 0105 if (!iIgnoredAdvice.contains(QStringLiteral("skgtrackerplugin_old"))) { 0106 SKGStringListList result; 0107 m_currentBankDocument->executeSelectSqliteOrder(QStringLiteral("SELECT t_name FROM v_refund_display WHERE t_close='N' AND julianday('now', 'localtime')-julianday(d_LASTDATE)>300 ORDER BY julianday('now', 'localtime')-julianday(d_LASTDATE) DESC;"), result); 0108 int nb = result.count(); 0109 output.reserve(nb); 0110 for (int i = 1; i < nb; ++i) { // Ignore header 0111 SKGAdvice ad; 0112 ad.setUUID("skgtrackerplugin_old|" % result.at(i).at(0)); 0113 ad.setPriority(2); 0114 ad.setShortMessage(i18nc("Advice on making the best (short)", "'%1' is an old tracker", result.at(i).at(0))); 0115 ad.setLongMessage(i18nc("Advice on making the best (long)", "This tracker does not contain recent transaction. You may want to close it if you do not intend to add other transactions")); 0116 output.push_back(ad); 0117 } 0118 } 0119 0120 return output; 0121 } 0122 0123 #include <skgtrackerplugin.moc>