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>