diff --git a/CHANGELOG b/CHANGELOG index b9f7710c3..7245b9d1b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,1999 +1,2000 @@ skrooge (2.23.0) *Correction bug 420557: Broken transaction group after CSV import *Correction bug 412262: documentation references obsolete "Merge operations" menu item *Correction bug 422154: Jumpy tab order in Accounts entry form + *Correction bug 422155: Skrooge doesn't use per-locale bank icons *Correction: Drag and drop file works only for operations. Not for all other objects. *Correction: cryptocompare fails if too many values are requested (>2000) *Correction: Change icon for trackers by a "crosshairs" *Correction: Source ratesapi doesn't work in appimage *Correction: Add "Settings" description in documentation *Feature: Add new source "exchangeratesapi.io" -- Stephane MANKOWSKI NotPlannedYet skrooge (2.22.0) *Correction bug 417163: Date 31/12 => 02/12 *Correction bug 418686: no sounds from Skrooge flatpak app *Correction bug 419006: kdeapps "nightly" flatpak isn't using latest KDE/Qt runtime version 5.14 *Correction: Set the "Date of import" and "Import balance" when importing from OFX *Correction: Merge of number of operation *Correction: Fix Get Hot New Stuff legacy Endpoints *Correction: Files not able to be checked out on Windows *Correction: Bad display in dashboard when all accounts of a type are closed *Correction: With last version of KDE, KMessageWidget are sometimes empty *Correction: Add missing "Full screen" menu *Correction: Fix "coinmarketcap" source (need an API key) *Correction: Remove warning due to QML dashboard *Feature: Add new source "cryptocompare" (need an API key) -- Stephane MANKOWSKI Thu, 09 Apr 2020 14:59:52 +0200 skrooge (2.21.0) *Correction bug 411958: Import CSV fails if account is empty *Correction bug 409166: skrooge appdata.xml missing release 2.20.0 *Correction bug 409703: No guide or tooltip for + icon in Categories form, and inconsistent *Correction bug 409165: skrooge appdata.xml gets warnings from validation-strict on flathub *Correction bug 412494: Skrooge flatpak silently fails to import anything from Amex QFX *Correction bug 412831: Filter for custom properties have to be prefixed with v_operation_display_all *Correction bug D22508: Get rid of obsolete methods *Correction bug D24327: Build flatpak with latest libofx 0.9.15 *Correction bug: Import CSV with comma when headers are forced (no automatic detection) *Correction bug: blank spaces at units "Internet code" (see: https://forum.kde.org/viewtopic.php?f=210&t=163184&p=424630&hilit=skrooge#p424630) *Correction: Import CSV file with footer line *Correction: Dashboard readability improvement (see: https://forum.kde.org/viewtopic.php?f=210&t=162650) *Feature D22484: Support using category, account, payee or unit properties in reports *Feature: New source of unite: ratesapi.io (see: https://forum.kde.org/viewtopic.php?f=210&t=162312&sid=c31044c567a38f04e7276263d3720df8) -- Stephane MANKOWSKI Sun, 01 Dec 2019 12:39:25 +0100 skrooge (2.20.0) *Correction bug 406903: no message when Skrooge can't open .skg file given on command line *Correction bug 406904: skrooge command-line help "--+[URL]" doesn't match its behavior *Correction bug 406741: QFX Date Import *Correction bug 407280: Skrooge flatpak unintentionally builds unused tests *Correction bug 407279: Skrooge flatpak needs later libofx *Correction bug 407257: Importing GNUcash (Account name instead of AccountID) *Correction bug 409026: skrooge appdata.xml fails validation on flathub, needs release and content_rating tags *Correction: aqbanking corrections: * Added auto repair for certain banks (Sprada, Netbank, Comdirect). * Added --disable-auto-repair command line option * Added --prefer-valutadate command line option * Removed --balance command line option *Correction: getNetWorth (used to compute PFS) is now computed by using all accounts *Correction: Remove color of hyperlinks in dashboard for a better rendering in dark theme *Correction: Remove broken quotes sources (BitcoinAverage, BitcoinCharts) *Correction: Better handling of the mode and comment field using the aqbanking import backend. *Feature: New REGEXPCAPTURE operator in "Search & Process" to capture a value by regular expression *Feature: Import backend aqbanking allows to import accounts without an IBAN. (See https://phabricator.kde.org/D20875) -- Stephane MANKOWSKI Sun, 23 Jun 2019 09:27:55 +0200 skrooge (2.19.0) *Correction bug 406321: ERR-8/ERR-5 importing qfx file, "More than one object returned in 'v_account' for 't_number='''" *Correction bug 406243: Skrooge does not import share operations in QIF file correctly *Correction bug 406270: Skrooge does not import investment operations in QIF correctly *Correction bug 406271: Skrooge does not import description of tags in QIF file into Tracker comment *Correction bug 406266: Skrooge does not import shares in QIF correctly *Correction bug 405578: build a nightly debug Skrooge flatpak *Correction bug 406488: crash importing a CSV *Correction bug 406549: Edit menu in Skrooge handbook is missing Skip, adds Find; missing context menu documentation *Correction: Add missing file categories_previous_period_table.html in monthly report *Correction: Migration failure with sqlite >= 3.25.0 due to ALTER TABLE behavior modification *Correction: Migration failure when some i_number are NULL *Correction: build skroogeconvert as a regular ("nongui") executable instead of an app bundle *Correction: prevent runtime discarding of the app icon if icon-from-theme lookup doesn't work (which it doesn't by default on OS X) *Correction: generate a multi-scale icon from all png icons size 256px and smaller *Feature: Tracker with running balance in "Operations" page *Performances: Better performances in payee view to compute recommended categories *Performances: Better performances in dashboard and monthly report when amounts by accounts *Performances: Better performances in dashboard to find all payee without operation *Performances: Better performances in "Delete payees without operation" -- Stephane MANKOWSKI Sat, 20 Apr 2019 14:03:43 +0200 skrooge (2.18.0) *Correction bug 403575: skrooge w/ -DSKG_WEBENGINE=ON: ui_skgtablewithgraph.h:15:10: fatal error: QtWebKitWidgets/QWebView: No such file or directory *Correction bug 403675: App crashes with segfault after second import *Correction bug 402330: error importing QIF File "SKGImportPluginQif::importFile() RC=[ERR-5]: SKGCategoryObject::addCategory failed because linked object is not yet saved in the database. *Correction bug 403725: import Quicken tags from QIF as Skrooge trackers *Correction bug 403985: kgbasegui/skgwebview.h:28:10: fatal error: qwebview.h: No such file or directory *Correction: Import KMYMONEY with non utf8 characters doesn't work (see https://forum.kde.org/viewtopic.php?f=210&t=156506) *Correction: Import KMYMONEY of scheduled operations from the next operation to add instead of the first one (to avoid duplicate) *Correction: Import KMYMONEY of shares with only one split must be done with the unit of the share *Correction: Nb occurrences and last date are not aligned on weekly schedules *Correction: Display all occurrences of a schedule in dashboard not only the first one *Correction: Display the currency symbol at the right place in scheduled operations *Correction: Display correctly the amount in "highlighted operations" in dashboard *Correction: The advice "Advice are very long to compute" can now be rejected *Correction: Add date in "Bank (light)" widget in html mode *Correction: Remove template from "Highlighted operation" widget *Feature: Better help for "Internet code" of sources in unit page *Feature: New MSN source of download for quotes *Feature: File can be made anonymous in a reversible mode *Feature: In "Operations" page, possibility to view all operations of an account + its credit cards associated *Feature: The number of years for forecasts based on scheduled operations can be choosen from settings *Feature: Possibility to choose the max date of schedules in dashboard *Feature: New action to skip scheduled operations *Feature: Possibility to skip scheduled operations from dashboard *Feature: Addition of options (Incomes, Expenditures, Transfers, ...) in contextual menu of graphs in "Account" page *Feature: Addition of options (Days, Weeks, Months, ...) in contextual menu of graphs in "Account" page -- Stephane MANKOWSKI Mon, 11 Feb 2019 21:32:09 +0100 skrooge (2.17.0) *Correction bug 400695: Designer plugins get installed as versioned libraries *Correction bug 400724: Import of Quicken 2012 .QIF file failed due to tags *Correction bug 402031: ERR-4/ERR-5 opening relative path to .skg from command line, then zombie Skrooge *Correction: Transfer created with value at 0. Regression due to 399672. (see https://forum.kde.org/viewtopic.php?f=210&t=155713&p=406978) *Correction: QIF import with transfer on split (see https://forum.kde.org/viewtopic.php?f=210&t=155614) *Correction: Add delay (300 ms) on text filter *Correction: "Search & Process" create a duplicate a duplicated category in some cases *Correction: Compliance with SQLCipher 4 *Correction: Close SQL database in mmb import *Feature: Like on transfer, the ratio is requested when creating a share operation (see https://forum.kde.org/viewtopic.php?f=210&t=155605&p=406979) *Feature: Progress bar in taskbar *Feature: Support only QT >= 5.7.0 -- Stephane MANKOWSKI Sun, 16 Dec 2018 17:50:46 +0100 skrooge (2.16.0) *Correction bug 398683: Periodic crashes on dashboard *Correction bug 397611: [ERR-5]: Format de date non pris en charge importation boobank *Correction bug 399480: Grammar mistake in .po file / - s missing in simple *Correction bug 399482: Wrong plural form in .po-File *Correction bug 399483: Spelling mistake in .po file "Transfert" should be "Transfer" *Correction bug 399672: Modifying multiple selected operations into transfers creates empty category and tracker if not identical *Correction: Ofx import must import FEE as debit *Correction: Document migration fails if format is "d.MM.yy 'г" (see: https://forum.kde.org/viewtopic.php?f=210&t=155575) *Correction: Inconsistency in "Incomes vs Expenditures" on sub operations with trackers *Correction: Build on windows *Correction: Use CPU instead CPU for QML (needed for printing) *Correction: Set background color on print to avoid print preview with black background on dark theme *Feature: Selection above, below or parent when delete an object *Performances: Solve performance issue due to new feature : More tooltips on "Operations" table -- Stephane MANKOWSKI Sun, 04 Nov 2018 14:12:43 +0100 skrooge (2.15.0) *Correction bug 397018: Check sqlcipher installation (issue detected on GENTOO) *Correction: Crash when sort a grouped view *Correction: Avoid to create 2 categories with the same name under the same category by using drag and drop *Correction: Avoid too many computation in SKGAccountObject::getPossibleReconciliations *Feature: Addition of a new option to check if import has been broken *Feature: More tooltips on "Operations" table -- Stephane MANKOWSKI Wed, 15 Aug 2018 22:01:16 +0200 skrooge (2.14.0) *Correction bug 394857: Reports do not graph operations by week correctly *Correction bug 395328: Bad perfo in SKGAccountObject::getPossibleReconciliations when too many operations *Correction: Sort on second column does not work with grouping *Correction: Change bootstrap url in templates *Correction: Better grouping for "Week", "Month", "Semester", ... *Correction: Report with forecast based on budget use the account using the most the category *Correction: Respan of group header must work when auto resize is disabled too *Correction: Import backend of account with "." in name *Correction: Remove error in boobank commands *Correction: Set automatically the bank account only when the icon is changed *Correction: The application is hidden when the dashboard is opened on an empty document *Correction: On operation page, the sort by the balance attribute sorts operations by date+id to have correct balances *Correction: Weboob backend doesn't work with option if account name has "id" *Feature: Addition of "Import date" on account object *Feature: Possibility to merge accounts with or without updating the initial balance *Performances: Improvement of performance of SKGTreeView::selectObjects and SKGTreeView::getState when grouping with many groups -- Stephane MANKOWSKI Sun, 24 Jun 2018 19:00:18 +0200 skrooge (2.13.0) *Correction bug 392828: Choose what to display on selection *Correction: Simple search in "Search & Process" doesn't escape words *Correction: Add notification (sound) on all creations / modifications of objects *Feature: Possibility to open concerned operations when auto reconciliation failed *Feature: Option on report to show decimals or not *Feature: Option "Execute on not checked operations" on "Search & Process" page *Feature: Addition of "Reconciliation balance" attribut on "Account" + icon to check if previous reconciliation has been broken or not *Feature: Addition of a new option to check if reconciliation has been broken -- Stephane MANKOWSKI Mon, 07 May 2018 20:31:26 +0200 skrooge (2.12.0) *Correction bug 389867: Amount Input Changes Value Prematurely *Correction bug 389866: Date Input Field Not Localized *Correction bug 389899: Split dates aren't updated when copying previous entry *Correction bug 390223: Opening d/l QFX file opens new skrooge file instead of importing into existing - opened file *Correction: Remove compilation warning (-Wsign-promo) *Correction: Can't resize the window and its width exceeds the screen (https://forum.kde.org/viewtopic.php?f=210&t=151023) *Correction: Search and process doesn't work in template mode with category used (see: https://forum.kde.org/viewtopic.php?f=210&t=150940) *Correction: No sound notification when an operation is created (see: https://forum.kde.org/viewtopic.php?f=210&t=151296) *Feature: All bookmarked report can be easily added to the dashboard with the + menu *Feature: New "Treemap" graph mode in reports *Feature: Automatic merge of payees, accounts and units when updated with another existing name *Feature: Alpha numerical values are now supported for number of operation (see: https://forum.kde.org/viewtopic.php?f=210&t=150988&p=394706) *Feature: Addition of a new option to displaythe environment variables used by Skrooge -- Stephane MANKOWSKI Thu, 08 Mar 2018 20:06:43 +0100 skrooge (2.11.0) *Correction bug 386942: .py scripts in /usr/bin *Correction bug 388955: Splitting Currency and Amount into separate columns *Correction: Better account number in weboob import *Correction: Weboob import is now importing account with better name (use of "label") *Correction: Weboob import compliant with utf8 *Correction: Failure when launching "skrooge filename.xxx" when filename.xxx is a file to import *Correction: "Switch closed" is available on unit but units are not closable *Correction: When a transfer is created only one of both operation has the tracker set: https://forum.kde.org/viewtopic.php?f=210&t=143127&p=384834#p384834 *Correction: Export of selection when selection size > 1 doesn't work *Correction: Define alternative icons when a "poor" icon set is used (like by default on gnome: Tango) *Feature: Tips of the day are now clickable and in the main page (not more popup panel) *Feature: Skrooge knows now 100 cryptocurrencies and is able to download their quotation *Feature: Enable AA_EnableHighDpiScaling if Qt version >= 5.6 *Performances: Better performances by resizing only visible columns (this is useful on payee table when category is hidden) *Performances: Better performances in the computation of the automatic category for a payee *Performances: Improvement of performance in SKGImportExportManager::findAndGroupTransfers. 11552 ms => 285 ms -- Stephane MANKOWSKI Sat, 03 Feb 2018 11:16:35 +0100 skrooge (2.10.5) *Correction bug 386594: Can not load share prices for French stocks -- Stephane MANKOWSKI Sat, 25 Nov 2017 23:15:27 +0100 skrooge (2.10.0) *Correction bug 383758: Report unreadable because element outlines are to thick *Correction bug 384119: Operation without suboperation after a kmy import *Correction bug 375865: Quick fill: select/enter item does not lock payee *Correction bug 384801: Converting multiple operations with different amounts to "transfer" type changes all amounts to 0 *Correction bug 384802: When creating multiple transfers into a different currency use the correct exchange rate for each date *Correction bug 385002: Display and edit default category for payee *Correction bug 385277: Wrong budget for split-operations with unaligned dates *Correction bug 384803: Creating many transfers to a different currency leads to uninterruptible series of dialog boxes *Correction bug 385990: Altered budgets aren't displayed until you reload the tab *Correction bug 386285: The minimum/maximum limit in account definition is interpreted as Primary Currency *Correction: Bad english in help on rules *Correction: Memory leaks *Correction: The source of unit download is now able to support date in "en_EN" locale event if this is not the system locale. Mandatory for implementing a Google Finance source. *Correction: Don't display the page of operations when the import is canceled *Correction: Better error messages in backend import *Correction: Optimisation in backend import *Correction: Optimise html of monthy reports *Correction: Port from QWebKit to QWebEngine *Correction: Avoid to compute too many combinations (and take hours) when trying to do an automatic reconciliation *Correction: Backend import must match account with id with letter like this 123456A@ldl *Correction: Never merge 2 accounts with same name in backend import *Correction: Crash when selecting many lines in search & process page *Correction: Enable print functions only when at least one page is opened *New feature: New "Google Finance" source of download for units *New feature: The source of unit download can be now an external script *New feature: New import backend "weboob_coming" importing coming operations (can be used for card with deferred debit) *New feature: A payee can be closed. Then it won't be available in combo boxes in operation page *New feature: A category can be closed. Then it won't be available in combo boxes in operation page *New feature: New parameters in boobank backend to be able to import operations only since a specified date *New feature: Export ledger format *New feature: The tooltip of "Search" explains now how the entered value is understood *Performances: Better performances on initial load (avoid to intialise a document before loading one other) -- Stephane MANKOWSKI Thu, 02 Nov 2017 21:17:06 +0100 skrooge (2.9.0) *Correction bug 380235: Reports table view: missing characters *Correction bug 380232: Yahoo api discontinued *Correction bug 380187: Shares always use the current rate/value. On unit page, you can choose if you want to see the history of the unit value or the history of the amount owned *Correction bug 380827: Pie chart alignment *Correction bug 380460: Failure when loading file from skrooge 1.12 *Correction bug 380821: Add keyboard shortcut to rename bookmarks *Correction bug 380820: Custom banks do not use their custom icon/image *Correction bug 380818: Cash account is not associated with a bank *Correction bug 380802: Going back and forth from "fullscreen mode" (Ctrl+Shift+F) loses the focus on "pages" tab on the left sidebar *Correction bug 381056: Dashboard portfolio widget: Wrong percentage values *Correction bug 381562: csv file import: unable to detect matching account *Correction bug 381168: Change tab order of properties editor *Correction bug 381847: Income & Expenditure widget does not match corresponding report *Correction bug 382162: Wrong budget in root categories if subcategories also include subcategories *Correction: Multithreading SQL connections must be compliant with SQLite mode *Correction: Temporary skg file protected by password are not well restore *Correction: Replacement of missing icons *Correction: Auto apply on advice duplicates remaining advice *Correction: The "duplicate" function creates operation with invalid creation date *Correction: Regular expressions for CSV import are now translatable *Correction: Values are not refreshed in amortization table when annual rate or insurance rate are modified *Correction: Zoom on dashboard widget in QML doesn't work *Correction: No refresh of "month" in the title of some dashboard widgets *Correction: In about, the authors of sub plugins are now displayed *New feature: New import backend using aqbanking *New feature: Import backends can now have parameters *New feature: Skrooge is now able to export only the selected accounts or operations *New feature: Bulk mode in import backends *New feature: In "Monthly Report", possibility to get attributes on pointed objects *New feature: Addition of new BitcoinAverage source to be able to download bitcoin rates (due to unavailability of BitcoinCharts) *Performances: Avoid advice computation in dashboard when the dashboard is not the current page *Performances: Better performance in advice "Some payees seem to be identical" *Performances: Better performances on load and save -- Stephane MANKOWSKI Sat, 12 Aug 2017 10:11:37 +0200 skrooge (2.8.1) *Correction: Bad display of information of current account when a second document is opened -- Stephane MANKOWSKI Sat, 15 Apr 2017 20:41:56 +0200 skrooge (2.8.0) *Correction bug 375721: Right-click (context menu) reload view *Correction bug 375875: Changing password does not work *Correction bug 375712: See operation for a payee *Correction bug 376025: Clear fields don't restore currency *Correction bug 375865: Quick fill: select/enter item does not lock payee is not well computed *Correction: The "Other" category in dashboard and report widget name "5 main categories of expenditure" *Correction: Sometimes the sort on date in operation table is not the same than the sort used to compute the balance, this causes troubles *Correction: Create fake operation doesn't work on account not having the primary unit (https://forum.kde.org/viewtopic.php?f=210&t=138803&sid=d0d34f728ef7f41bb6c32764ccf3d8f6) *Correction: "Income vs Expenditure" dashboard widget is not refreshed when data are modified *Correction: Bad display in "5 main categories of expenditure" in QML dashboard widget *Correction: Better performance in "Incomes vs Expenditures" dashboard widget *Correction: Duplication of operation must not duplicate the creation date *New feature 375866: Quick fill find operations in other account *New feature: New columns visible in operation table *New feature: New "budget" dashboard widget in QML *Performances: Better performances by using multithreading and caching *Performances: Better performances in "Apply all recommended corrections" -- Stephane MANKOWSKI Wed, 05 Apr 2017 20:24:45 +0200 skrooge (2.7.0) *Correction: Due to a security hole, sqlcipher is no more an option. If you use password protection, we strongly encourage you to use this version of Skrooge and to change your password *Correction: "Delete" and "Add property" are never activated in "Simulator" page *Correction: Current periods (Quarter, Semester, Year) must be available in some widgets of the dashboard *Correction: Only previous months are relevant in "Personal finance indicator" of the dashboard *Correction: Boobank backend does not import transactions when the date format is YYYY-MM-DD 00:00:00 *Correction: Remove "Stooq monthly history.txt" because it does not work *Correction: Description of SKGPeriodEdit is not correct *New feature: Addition of the "Other" category in dashboard and report widget name "5 main categories of expenditure" *New feature: New grantlee filter to execute the sql order you want on the document. This will improve html reports *New feature: New grantlee filter to convert an integer in file size format (example: 390.2 MB) *New feature: Ability to open a file property by url *New feature: CSV export from report is now able to export raw values (http://forum.kde.org/viewtopic.php?f=210&t=112209&p=290153#p290153) *New feature: Resize of account number in "Accounts" page to be able to entre IBAN number *New feature: "Rename" for all dashboard widget *New feature: "Search & process" is now possible on bank name. This allows to create an alarm based on the deposit guarantee level per bank -- Stephane MANKOWSKI Sun, 22 Jan 2017 17:45:58 +0100 skrooge (2.6.0) *Correction bug 372470: Scheduled transactions on dashboard *Correction bug 372938: merge imported operations wrong warning about different amounts *Correction bug 373147: Dashboard/Scheduled operations typo *Correction: Remove old skrooge icons to use the official breeze icons *Correction: Do not install namelink for private library *Correction: Avoid inconsistency when primary unit is not well defined (https://forum.kde.org/viewtopic.php?f=210&t=136856) *Correction: QIF import fails when non utf8 chars are found *Correction: Display all type of item in "Search & Process" *Correction: Execution of "template" rule after import destroys the template itself (https://forum.kde.org/viewtopic.php?f=210&t=137121&sid=b3336f56f03d79f50ad7d53b9e919076) *Correction: Recovery of the working copy doesn't work in sqlcypher mode *Correction: Better performances and memory use in SKGAccountObject::getPossibleReconciliations *Correction: Better automatic account selection by using bank and agency numbers *Correction: Bad unit symbols in min and max limits in accounts page *Correction: Impossible to duplicate a page not having selection (eg. Dashboard, monthly report) *Correction: The dock "Message" is not reinitialized when a new file is loaded *Correction: In budget module, replacement of "Remove existing budgets" by "Remove existing budgets for xxx" *Correction: BitcoinCharts currency import order must be inverted because CSV file has been inverted *Correction: Better display for "Income vs Expenditure" on QML dashboard *Correction: New limit to history size set to 999 instead of 99 *Correction: To avoid partial import with backend, the import is fully done in case of delta detected *Correction: weboob backend is now searching transactions on date AND rdate to avoid missing transaction *Correction: Skrooge is now able to download addition stuff (monthly report template, quote source) with knewstuff *Correction: Open file property fails when the property name contains the full path (https://forum.kde.org/viewtopic.php?f=210&t=137528) *Correction: Avoid duplicated operation when importing attached accounts with weboob *Correction: Group on suboperations must display min, average and maw amounts (https://forum.kde.org/viewtopic.php?f=210&t=137569) *Correction: The option "Import only operations since the last imported one" must not be applied with backend import *Correction: "Estimated interests" are now in QML in dashboard and are available for monthly reports *Correction: Addition of tooltips on each operator in "Search & Process" *New feature: Addition of "nocolor" to the "money" Grantlee filter *New feature: Remove .skg in backup file name if .skg is added in the prefix (https://forum.kde.org/viewtopic.php?f=210&t=136518&p=366065#p366065) *New feature: "Alarm" dashboard widget is now compliant with QML mode -- Stephane MANKOWSKI Tue, 27 Dec 2016 18:42:32 +0100 skrooge (2.5.0) *Correction bug 364407: Doesn't build with Qt 5.7 *Correction bug 366025: Skrooge perpetually asks me to save updated tab state *Correction bug 368196: Delete sub-operations in edit delete selected operation in list *Correction bug 368356: Show amount sign on lost focus *Correction bug 368195: No lock on target account for a transfer *Correction bug 369090: Transfers sub operation created by template has wrong date *Correction: Migration connect from ui file to cpp file *Correction: Better colors of amounts in tooltips of advices *Correction: The 31 of the month, in budget page, "Previous month" does not work *Correction: When a second instance of Skrooge is launched with a file as argument, the file must be imported in the first instance of Skrooge *Correction: Since QT5.7, no more dependency on KDELibs4Support *correction: Dates wrong on dashboard - date format instead of the date itself *Correction: Keep properties when 2 operations are merged *Correction: Correction in weboob backend to avoid missing transactions and improve performances *New feature: Massive update is now available for amount in "Operation" page *New feature: Massive update is now available for date in "Operation" page *New feature: Capability to set/change order of budget rules *New feature: Tooltip on modified amount of budget to explain the reasons of modifications *New feature: Import of PDF invoice -- Stephane MANKOWSKI Sun, 25 Sep 2016 09:00:24 +0200 skrooge (2.4.0) *Correction bug 359679: Building the v2.3.0 package on Arch Linux dies with an error 'isnan' was not declared in this scope *Correction bug 362231: Lost date in imported split operation *Correction: Corruption of document after removing the password *Correction: In unit page and dashboard widget the annual performance is now computed on a year (not with an extrapolation of the last performance) *Correction: Refresh "Interest" dashboard widget when operations are modified *Correction: Copy needed files in local when a new template (for monthly report) is created *Correction: All advices are not displayed in dashboard *Correction: More setPlaceholderText for better GUI *Correction: Responsive report is now using highchart *New feature: New tutorial grantlee template to learn how to develop a new template *New feature: New option to select if the dashboard must be in html or qml. Qml mode is still experimental -- Stephane MANKOWSKI Fri, 06 May 2016 21:07:29 +0200 skrooge (2.3.0) *Correction bug 357081: No option to disable tray icon *Correction bug 357414: Bad display amount in split editor *Correction bug 358315: Typo in .desktop file leads to KRunner freeze *Correction: Avoid failure in kmy import when sub category already exists *Correction: Better autoreconciliation (the autoreconciliation can be done even when operations are not well sorted) *Correction: Migration to nullptr *Correction: Replace "XXX* yyy = new XXX" by "auto yyy = new XXX" *Correction: Thanks to regular expression, the "word" function is now able to interpret "N:1234" as a 2 words "N" and "1234" *Correction: Better icons (correction of installation for breeze) *Correction: Autoreconciliation doesn't work for accounts in other units than the primary *Correction: Better computation of the preferred currency for QIF import *Correction: After a modification or an creation the focus must be given to the table *Correction: Error when launching Skrooge from krunner *Correction: Bad sums in reports *New feature: New column "Balance import" in account page with an indicator to know if the account is still aligned with import balance *New feature: Check balance of accounts after import with backend *New feature: New "Personal Finance Score" in monthly reports *New feature: New "Personal Finance Score" in dashboard *New feature: Selection sum is now in the status bar *New feature: On tables, when the filter changes, the selection remains visible *New feature: Ctrl+Maj+V allows to validate OR UNVALIDATE the imported operations -- Stephane MANKOWSKI Sun, 21 Feb 2016 21:55:44 +0100 skrooge (2.2.0) *Correction bug 352674: SQLite version of the system not aligned with embedded in Qt when using sqlcipher *Correction bug 349961: Values in "Text" report are clickable to open corresponding operations *Correction bug 349976: Default categories for payees *Correction bug 354139: Pb when opening operations in sub-operation view *Correction bug 341463: Monthly reports include transfers between accounts and shows as income/expenses *Correction bug 354439: Re-open close account with money: wrong warning *Correction bug 354463: Incomes/Expenditures in monthly reports do not account for sub-operations of split operations *Correction bug 354424: Displayed balance is 0,00 and operation is ignored afterwards *Correction bug 354817: Arrows should increment/decrement operation number *Correction bug 355376: Category too small in split editor *Correction bug 355956: Not existent type in dashboard *Correction: Drag and drop file is now able to move a file *Correction: The WORD function of "Search & Replace" is no more sensible of useless space *Correction: Open skrooge document from desktop *Correction: Set open source licence on svg files *Correction: Correction ofx import in ECM_ENABLE_SANITIZERS='address' mode *Correction: Better print of dashboards by printing each widget individually *Correction: Better counting of pages in print function *Correction: Monthly reports with "default" template is now printed in only one page (remove page-break-before: always) *Correction: Monthly reports with "responsive" template must not print url *Correction: Migration from sqlite to sqlcipher mode does not work when the password contains the character " *Correction: In "Search & Process", the between function must work when v1 Sun, 29 Nov 2015 18:48:31 +0100 skrooge (2.1.1) *Correction bug 351977: Missing Comment in desktop file *Correction bug 350722: Sudden date change from 20XX to 19XX *Correction: Upload of knewhotstuff does not work *Correction: Avoid performance issue when an operation is created very far in the future (example: 01/01/8015) *New feature: New source of download "GrandTrunk" better than yahoo finance for currencies -- Stephane MANKOWSKI Fri, 11 Sep 2015 13:10:09 +0200 skrooge (2.1.0) *Correction bug 349349: Allow to enter year with 2 digits only *Correction bug 349328: Bad date on split operation after fast edition *Correction bug 349327: Bad date format for sub-operation display in split tab *Correction bug 349624: Add operator on fast filter *Correction bug 349776: Freeze when splitting and editing a future operation *Correction bug 349329: Tools should display modifications before applying them *Correction bug 349961: Split value of operations in reports/exports *Correction bug 350154: Cannot change rate symbol (%) position in Simulations panel *Correction bug 350722: Sudden date change from 20XX to 19XX *Correction bug 350937: Some words are not translated *Correction bug 340647: Encrypted Skrooge file is decrypted in-place *Correction: Authorize only word characters and space in name of templates of reports *Correction: Authorize only word characters and space in name of source of quotes *Correction: Missing unit symbol in monthly report *Correction: Failure on export *Correction: Bad display in period selector of "Income & Expenditure" dashboard widget *Correction: Bad filters in some open file dialog *Correction: Error when open link with non ASCII characters *Correction: Better detection of unaligne dates between operations and sub operations *Correction: The first update of monthly report must take into account the selected template instead of using the default one *Correction: Add credits page in "About" *Correction: Double click on skrooge document opens skrooge but the document is not loaded *Correction: Code rework for contextual menus *New feature: "Open..." action in contextual menu of reports *New feature: New function to import simple rules (payee=xxx => category=yyy) from csv file *New feature: More period options in dashboard widgets *New feature: "5 main categories of expenditure" in dashboard and report is now clickable *New feature: "Quotes" in dashboard and report is now clickable *New feature: Addition of list of key users in credits *New feature: Messages/errors can have associated action *New feature: "Open operations modified by this transaction" *New feature: Delete items in history -- Stephane MANKOWSKI Thu, 27 Aug 2015 19:20:30 +0200 skrooge (2.0.0) *Correction bug 347762: Invalid error message for SQLite version check after an update of SQLite *Correction bug 324653: Auto-Hide Scrollbars for Report Graphs *Correction bug 348865: Do not show translated tooltip *Correction bug 348490: Split with almost 0 operation *Correction: Porting on KF5 / QT5 *Correction: Use of Q_DECL_OVERRIDE *Correction: Bad account selected in editor when a closed operation is selected *New feature: Close action available in menu and contectual menu -- Stephane MANKOWSKI Sun, 14 Jun 2015 18:16:43 +0200 skrooge (1.12.5) *Correction bug 348619: Freeze amount should freeze unit *Correction bug 348621: Field order with tab key *Correction bug 348620: Display of multiple operations with common fields *Correction bug 348568: Payee with operations in 0 operation group *Correction bug 345994: Bad unit on some operation after search *Correction: Build for QT built with -reduce-relocations -- Stephane MANKOWSKI Wed, 03 Jun 2015 22:07:31 +0200 skrooge (1.12.0) *Correction bug 345974: Skrooge alarms keep firing up regardless of specified alert amount *Correction bug 346151: Fast edition do not fill operation sign *Correction bug 345998: Add tooltip for all history actions *Correction bug 345799: Moved then hiden column displayed *New feature: Automatic point operations created during reconciliation *New feature: "Simple" mode in "Search and process" page *Performances: Better performances on selection change in "operation" page -- Stephane MANKOWSKI Thu, 07 May 2015 20:46:21 +0200 skrooge (1.11.0) *Correction bug 341020: End of text in lineedit hides under the "clear" icon button *Correction bug 341450: Empty skg_bill.csv is created every time I launch Skrooge *Correction bug 341463: Monthly reports include transfers between accounts and shows as income/expenses *Correction bug 342737: Multiple date modifications on scheduled operations *Correction bug 343730: Resize/hide internal filter panel in report *Correction bug 335945: Support making split operations from standard operations by search and process *Correction bug 344250: Bank ING-DIRECT in France has changed its bank number *Correction bug 345580: Share without tax should not be split *Correction bug 345654: Btn Add grayed after entering values information *Correction bug 345661: Selecting multiple operations: amount is not ----- *Correction bug 345719: Enhance fast search/filter on lists *Correction bug 345826: Bas edit fields on list sub-operation after search *Correction bug 345416: Crash when searching on 'type' field *Correction: "Search" and "Report" do not work on properties of suboperations *Correction: Bad tooltips in "Report" for expand and collapse *Correction: Support invalid OFX file having debit with positive amount *Correction: Timeline does not work in some cases *Correction: More flexibility during import of ofx file not having id on transactions *Correction: Anonymized file is renamed to avoid accidental overwrite of the current file *Correction: weboob backend compliant with version 1.0 *Correction: Avoid crash and generate an error when the sqlite version of the system is not aligned with the sqlite version embedded in QT *Correction: Open suboperation from multi selected operations *Correction: Avoid deletion of previous file and backup during save in case of file system full *Correction: When a folder of bookmark a tab doesn't have the right icon *Correction: Stable sort when sorting by date to avoid ununderstandable balance *Correction: In table, when rows are groupes, the row representing the group spans all columns *Correction: Avoid crash in Add properties on suboperations *New feature 343766: Better custom report configuration *New feature: New dock to be able to see all messages displayed *New feature: Alarm messages can be have parameters for the total amount (%1), alarm amount (%2) and difference (%3) *New feature: Show sum of spendings in tables when operations are grouped *New feature: New advice detecting scheduled operations having date not aligned with the last inserted operation *New feature: The target directory of the backuped file can be force *New feature: Now some advices are recommended *New feature: In settings, you can define default comments, payees and categories for fake, commission and tax operations *New feature: New button on advices widget to apply all recommended advices *New feature: Display average, min and max on groups in tables *New feature: WORD function is now able to extract word from the right by using negative parameters *New feature: Addition of "Creation date" on operations -- Stephane MANKOWSKI Sun, 05 Apr 2015 19:18:04 +0200 skrooge (1.10.0) *Correction bug 334626: When doing a transfer, my specification of + or - is ignored *Correction bug 335943: Please add column "number of operations" to categories view *Correction bug 336320: OFX file import duplicates the last 12 transactions *Correction bug 338351: Reconciliation with additional currencies *Correction bug 338993: Change main currency fails to update amounts *Correction bug 338994: Currency rate not saved for transactions *Correction: Open URL does not work in unit page *Correction: Wrong date in message "Operation 'XXX' will be inserted in YYY days" *Correction: Auto repair of qif file not having sum of suboperation amount != operation amount *Correction: Better error message on mny import when java is not installed *Correction: Weboob0g backend is now compliant with weboob version 0h *Correction: Correction in bitcoin quote download *Correction: Remove duplicate in "To Account" field on operations *Correction: Import of mode for mny files *Correction: Better detection of transfers in mny import *Correction: Automatic resize of columns in "Search and Process" edit panel to facilitate the creation/update of rules *Correction: Missing template "categories_month_table" *Correction: For credit card account, the binding of account is optional *Correction: Remove useless "Expand All" and "Collapse All" on history table *Correction: "Add property" and "Delete" is now working on sub operations *Correction: "Highlight" is disabled on sub operations *New feature: The future can be added or not in "Current" or "Last" periods *New feature: Defered credit card management *New feature: Capacity to apply a template on operations *New feature: Capacity to automatically apply a template on operations from "Search and Process" *New feature: Sort of table memorize the previous sort to be able to sort by column 1 and column 2 *New feature: New advice to inform the user when the monetary decimal symbol is not defined in KDE localization settings *New feature: 2 options in graphs, one for limits visibility, one for average visibility *New feature: New advice to detect similar payees *New feature: New advice to detect similar categories *New feature: Add in documentation how to use kdewallet with weboob backend *New feature: Import iif file *Performances: Better performances in "Possible schedule" *Performances: Better performances in dashboard -- Stephane MANKOWSKI Tue, 28 Oct 2014 20:57:41 +0100 skrooge (1.9.0) *Correction bug 327148: Version 1.8.0 doesn't build *Correction bug 328335: Wish for fixed table row header *Correction bug 326764: When printing hard copy of report, only data in view in window is printed, not full report data *Correction bug 329568: Simulator utility problem *Correction bug 329825: When opening crypted file with false password skrooge falsely states the file is corrupted *Correction bug 329876: Weboob import from paypal ignores dates and creates account "0" *Correction bug 330354: Budget forecast duplicates operation creation *Correction bug 330428: Sorting doesn't work on Reconciliation date in Accounts view *Correction bug 331191: Obsolete term „Context“ in docbook *Correction: Remove conflict on CTRL+C shortcut *Correction: Import mny does not work with space in file name *Correction: In case of failure during backup file creation a warning message is displayed instead of an error avoiding to save the file *Correction: Refresh delta during reconciliation *Correction: Better PDF export from Monthly report *Correction: Import CSV unit file with "," as separator *Correction: Better KMyMoney import *Correction: Imported "Wallet" accounts are in bank named '' *Correction: Avoid wrong transfert in Grisbi import *Correction: The option "Import only operations since the last imported one" uses a delay of 4 days to avoid missing operations due to value date *Correction: Avoid error in import of homebank file without parent attribute on categories *Correction: Correction for unit download with Stooq *New feature: More option in "Income & Expenditure" dashboard widget *New feature: New shortcuts for "Expand all" and "Collapse all" *New feature: Operations can be split by date *New feature: Imports (csv, qif) support date format like this: 31Dec2012 *New feature: Import CSV support now "semicolon", "comma" and "tab" as separator *New feature: Monthly report is now able to display reports on months, quarter, semesters and years *New feature: New "responsive" template for monthly reports *New feature: In graph, sums are now all computed *New feature: Pareto curve in graph *New feature: New "quarter" and "semester" period in graph and "Incomes & Expenditures" dashboard widget *New feature: Ability to reorder the suboperations in the split operation *New feature: Better date filtering in operation page *New feature: More operators is "Search" panel *New feature: New statistic plugin -- Stephane MANKOWSKI Sat, 12 Apr 2014 16:11:26 +0200 skrooge (1.8.0) *Correction bug 319706: OFX trntype not imported, rest okay *Correction bug 320114: Wrong bank balance at dashboard *Correction bug 320112: Importing CSV operations with mixed " and ' text field separators *Correction bug 320226: Monthly report does not work due to missing template *Correction bug 320240: Impossible to enter exact amount for given unit in pop-up *Correction bug 320242: Transaction confirmation pop-up doesn't use defined unit value for transaction date for suggested value *Correction bug 320261: Dashboard "Income & expenditure": no values, strange colors *Correction bug 320157: Skrooge not working when .skg file is located on Samba share *Correction bug 320323: Add function ("rest to") In budget *Correction bug 320298: Default automatic format detection while importing a file leads to wrong entries creation *Correction bug 320070: Allow changing operation date through "Search & Process" *Correction bug 320716: Skrooge does not import all operations using weboob *Correction bug 320717: Use rdate instead of date in weboob backend *Correction bug 319993: Please adopt application logo/icon for smaller resolutions ==> skrooge-mini can be choosen for small resolutions *Correction bug 319990: Please fix icon alignment in Pages tab *Correction bug 322306: Skrooge Crash using Forecast Schedule *Correction bug 322069: Designer plugins should be unversioned .so files *Correction bug 323380: Minor date bug when using the stock portfolio widgets *Correction bug 320066: Crash importing KmyMoney exported file from Skrooge *Correction bug 324972: Import fails without an error when account is defined in CSV *Correction bug 325081: Add a « Yesterday » choice in the date picker *Correction bug 325174: Importing from gnucash file doesn't import accounts fo types 'Mutual Fund' nor 'Credit Card' *Correction bug 325223: Crash when exiting skrooge *Correction bug 324008: Erreur when importing .mny file. Error when analysing categories.json *Correction bug 325675: Build error in skgfileplugin.cpp for openSUSE 12.2 KDE 4.9 *Correction: KMyMoney exports does not need a check of integrity anymore *Correction: Addition of all icons in size 256 and 512 *Correction: Block drop of a bookmark under another bookmark *Correction: Bad date format detection when the second value is 9 (example: 3/9/04) *Correction: Remove the "Bank account " string in the name of the account name created by an OFX import *Correction: Icon for "Amount entered" *Correction: Authorize long number for operations like 5490990004 *Correction: Default graph mode = line *Correction: Better detection of duplicate operations after import *Correction: JSON export based on QJson *Correction: The setting "Import only operations since the last imported one" allows importation for the same date (< instead of <=) *Correction: Impossible to change state of operation from suboperation view *Correction: More permissive "Open duplicate" *Correction: Better setting layout for import/export *Correction: Import/Export minimum and maximum balance in KMyMoney importer *Correction: Import minimum balance in Grisbi importer *Correction: Import minimum balance in Homebank importer *Correction: New "weboob0g" backend compliant with the Weboob 0.g *Correction: When a file is selected for the icon of the bank, the file name is displayed in the name of the bank *Correction: In simulation page, the interest are computed with only operations with type=currency, not with shares *Correction: Error when importing skg file by double clicking when skrooge already open *Correction: No more password panel when the user loads an invalid Skrooge file *Correction: In report, the forecast based on budget is displayed even when no operation in account *Correction: Shortcuts in "Show" menus *New feature: Notifications and error messages are now based on KMessageWidget *New feature: The restore file is now base on KMessageWidget *New feature: Option to auto download from backend on opening file (default=false) *New feature: Import Microsoft Money documents (.mny) protected or not *New feature: Tarballs are not uploaded on download.kde.org *New feature: Addition of russian banks *New feature: Reopen last page closed *New feature: Max and min limits on accounts *New feature: Better and new advices based on limits of accounts *New feature: Sound emmission on operation creation *New feature: Import "Budgetary allocation" and "Fiscal year" from Grisbi files as properties *New feature: Information message explaining how to exist full screen mode *New feature: Addition of date of last reconciliation on account *New feature: Amount owned on unit table *New feature: Download date on unit table *New feature: New account type: Pension *New feature: New set of categories for french people *New feature: Addition of "Configure notifications..." in configuration menu *New feature: Download and add bills as property by using boobill (weboob) *New feature: Rename of property *New feature: Export HTML and ODT from tables *New feature: Automatic process to recover a corrupted file *New feature: Possibility to print current page *Performances: Better performances in dashboard *Performances: Better performances in monthly report *Performances: Better performances in import of multi files (or from backend) by applying "search & process" rules only one time *Performances: Better performances in kmy export *Performances: Better performances by avoid to refresh autocompletion on widgets after light transactions -- Stephane MANKOWSKI Sat, 05 Oct 2013 18:54:16 +0200 skrooge (1.7.1) *Correction bug 319565: Bad performances on ubuntu 13.04 *New feature: Open report from dashboard widgets -- Stephane MANKOWSKI Thu, 09 May 2013 22:28:28 +0200 skrooge (1.7.0) *Correction bug 316604: Income and Expense widget on the dashboard does not respect suboperations in split operations *Correction bug 316796: Reports crash when closed normally *Correction bug 318063: New file format (AFB120 CFONB) *Correction bug 279967: When automatically started at login, Skrooge is always displayed on all desktops *Correction bug 319145: Multiple currency support still buggy *Correction: Group operations with more than 2 operations selected *Correction: Group operations with already grouped operations *Correction: Hide internal properties in "Search & process", in operation page and in the function "Add property" *Correction: QIF import does not support mix of date format *Correction: The advice action "Remove groups with only one operation" does not remove the operation but the group *Correction: Better performances in kmymoney import and all other imports *Correction: skroogeconvert does not support files without path (example: skroogeconvert -in t.csv -out t.kmy) *Correction: Better performances of skroogeconvert in case of skg import or export *Correction: Global better performances by using the right index on unit table *Correction: Rename "Undo document" to "Revert document" *Correction: Reduce the number of messages when using backend import *Correction: Possibility to group tables on properties *Correction: Better support of import/export with url *Correction: Better merging of operations in QIF import *New feature: More modification functions in "Search & Process" panel for Payee, Account, Tracker *New feature: New "capitalize" function in "Search & Process" panel *New feature: New attributes "Unit" and "Transfer" in "Search & Process" panel *New feature: All update functions are now available for properties in "Search & Process" panel *New feature: New icon in tab bar to create new page *New feature: 'To account' in operation table and "Search & Process" *New feature: More attributes in line and column in reports (graph) *New feature: Monthly reports and main page use the general font of KDE *New feature: Possibility to force the date format for qif and csv imports *New feature: More functions in tool menu *New feature: More tips of the days *New feature: Dispay option "Hide pointed operations" in operation page *New feature: Possibility to group tables on hidden column *New feature: Facilitate creation of standard currencies with auto completion *New feature: Addition of the new currency "Bitcoin" with automatic download of the rate *New feature: In dashboard and monthly report, banks can be clicked to open corresponding operations *New feature: In report, the graph correction can be done by multiply or divide -- Stephane MANKOWSKI Sat, 04 May 2013 16:49:45 +0200 skrooge (1.6.0) *Correction bug 314389: weboob import does not work *Correction bug 314743: Can not resize window when operations tab is displayed *Correction bug 313926: Version 1.5.1 shows warnings *Correction bug 313948: Skrooge crashed after double clicking on an account after using clean import tool *Correction bug 313928: Warnings during build on OS X > 10.6 *Correction: Splash screen and notifications on windows *Correction: Better error management in weboob import plugin *Correction: Faster and without notification units downloads *Correction: Facilitate toolbar customization *Correction: Bad date format identification in some cases *Correction: Remove traces "Attempt to use QAction 'XXX' with KXMLGUIFactory" *Correction: Activation of link in "Incomes and Expenditures" dashboard widget *Correction: Operations in "Loan" accounts are not more taken into account in budget and "Incomes and Expenditures" dashboard widget *Correction: More point styles in graph and better rendering *Correction: Display of infinity symbol in dashboards and monthly reports *New feature: "Open all" and "Bookmark current page here" in the bookmark button *New feature: Button in bookmark dock to discover the contextual menu *New feature: Buttons on dashboard widgets to discover the contextual menu *New feature: New cursor on dashboard widgets to show that widgets are moveable *New feature: New dashboard (fast remove, fast add, fast move, fast drag & drop) *New feature: ToolButton displaying contextual actions on top right of tables *New feature: "Pages" launchers can be added in the toolbar *New feature: New WORD function in "Search & process" to extract a word of an attribute *New feature: More generic import through backends *New feature: Support values like this "3128/100" in imports -- Stephane MANKOWSKI Mon, 25 Feb 2013 18:06:13 +0100 skrooge (1.5.1) *Correction: Avoid endless "wait cursor" in case of canceled load of protected file *Correction: More robust weboob import for backend not supporting parallel download *Correction: Operations page layout with very long comments -- Stephane MANKOWSKI Tue, 22 Jan 2013 21:09:04 +0100 skrooge (1.5.0) *Correction bug 311252: Creating account with existing name just modify the existing one *Correction bug 312609: Banks widgets at the dashboard show wrong values *Correction bug 312671: Compile warnings *Correction bug 312859: Searching for an empty payee doesn't seem to work *Correction bug 313140: Thousands of compile warnings when using [-pedantic] [PATCH provided by Andi Clemens] *Correction bug 313141: Adjust layout in preferences window [PATCH provided by Andi Clemens] *Correction bug 271292: "Set to upper" process does not work with all characters *Correction bug 263265: Support regexps on imported data *Correction bug 313268: Better layout fot the "comment" field in the operations view *Correction bug 313240: Transfers between accounts with different currencies show as income/expense *Correction: Disable "Pin this page" when no page is opened *Correction: Disable "Print" and "Print preview" when no page is opened *Correction: Correction in the show menu of the operation page when only one account with ";" in the name *Correction: Pb of propagation for budget rule with Period=Current Year *Correction: Avoid duplicate message in notification *Correction: Avoid to set an operation in more than one budget item when "garbage" budgets are used *Correction: Display reconciliation field when the "Reconcile" function is called from the page of accounts *Correction: Transfers ignored by default in" "Incomes & Expenditures" widget and reports *Correction: Adapt the size of the "Account" field to the lenght of the accounts names *Correction: Set focus on "Date:" field after insertion or update of an operation *New feature: New "Process Immediately" method to process immedialetly some scheduled operations *New feature: Multiselection for "Jump to the operation" in scheduled operation page *New feature: New advice to detect non alignment of comments (operation vs suboperation) for simpe operations *New feature: New advice to detect operations without mode *New feature: New option Automatic refresh/Manual refresh in advice dashboard widget *New feature: New advice to switch on "Manual refresh" when advice are very long to compute *New feature: New advice to detect too complex unit definition like this: IBM => $ => £ => € (not supported) *New feature: Possibility to do graphic reports with the bank as column of line *New feature: Automatic import through weboob (http://weboob.org/) *Perfo: Better performances in advices by avoiding to compute dismissed advice *Perfo: Better performances in categories and payees tables *Perfo: Big performances improvement for huge transaction like imports or massive delete of accounts -- Stephane MANKOWSKI Sat, 19 Jan 2013 16:31:49 +0100 skrooge (1.4.0) *Correction bug 306517: "Incomes & expenses" widget displays a wrong sum for expenses *Correction bug 308050: Untranslatable strings in 'Budget' Page *Correction bug 308395: "list of operations" screen : inoperative filters (hide closed operations >1 & 2 weeks) *Correction bug 310372: Word completion in the comment field in standard operation does not work even if it was added via split operation *Correction: Better colors in "Expenditures vs Icomes" dashboard widget *Correction: Support qif file having Type:Class with description *Correction: Remove "All" in operation menu when only one account is created *Correction: Move "Export ..." menu in "File" menu *Correction: Bad display of account having a "&" in operation page *Correction: Move "Processing" actions in the main menu named "Tools" *Correction: Hide title when reset filter in operation page *Correction: Better performances in SKGDocumentBank::computeBalances by using compound query *Correction: Avoid freeze when a very old value (example: 14-11-0012) is entered by error for a unit *Correction: Avoid freeze in reports when a very old operation (example: 14-11-0012) is entered by error *Correction: "Quantity owned" in unit page does not initial amount of accounts *New feature: New button on unit page for opening the web site of the download source *New feature: Warning on closing non null account *New feature: Support for Activities *New feature: "Stock portfolio" in monthly report *New feature: "Stock portfolio" dashboard widget based on monthly report *New feature: Possibility to add hyperlinks in monthly reports *New feature: Export html in monthly reports *New feature: New widgets for dashboard *New feature: 2 new templates for monthly report are delivered by default *New feature: 2 new advices detecting very old values of unit and very old operations *New feature: New advice checking if budgets rules are treated *New feature: New option for import to "Import only operations since the last imported one" -- Stephane MANKOWSKI Sun, 09 Dec 2012 11:51:43 +0100 skrooge (1.3.3) *Correction bug 305880: On the Dashboard, scheduled transactions have wrong number of decimal places *Correction bug 306119: Cannot open document created in 1.3.0 with 1.3.2 *Correction bug 305879: Account panel shows Edition - should be Addition *Correction: Smaller bank icon selector in "Accounts" page *Correction: Set default type as "currency" in "Units" page when primary and secondary units are already defined *New feature: Add "savings" as type of account *New feature: "Tracked" operations in option of "Income vs expenditure" widget of dashboard *New feature: Export JSON -- Stephane MANKOWSKI Mon, 03 Sep 2012 16:25:21 +0200 skrooge (1.3.2) *Correction bug 300228: Failed to import from KMyMoney file *Correction bug 301137: 'To Account' of an existing money transfer is displayed incorrectly in edit area *Correction bug 302388: Gnucash import failes: Better error message in case of negative value for a currency *Correction bug 302502: Message for possible schedule incomplete *Correction bug 303527:Support more time options for ‘show checked operations’ *Correction bug 304003: Crash when removing transaction number of transactions with duplicate account numbers *Correction bug 304313: Importing a KMyMoney file results in error: "[ERR-11]: 'KMYMONEY-KMYMONEY-TEMPORARY-ACCOUNT': You are not authorized to delete this account because it contains some checked operations" *Correction: Rename columns of budget table *Correction: Better CSV and TXT exports of tables grouped by a column *Correction: Better SVG export of tables *Correction: Restore palette in tables after print *Correction: Do not display disabled schedules in dashboard *Correction: Remove text on common icons in toolbar by using QAction::LowPriority *Correction: In "Scheduled operations" page, the button "Jump to the operation" opens the operation page in template mode to authorize updates *Correction: New wording; "To be Checked" instead of "Foreseen" or "In Transit"; "Checked" instead of "cleared" or "validated" *Correction: Better mouse icon when closing pined page *Correction: Remove X confirmation messages when close a document having X pinned pages *Correction: Focus on opened page from bookmarks when the current page is pinned *Correction: Allow massive update in account page *Correction: Avoid bad table display when grouped *New feature: Progress bar in budget table for active budgets *New feature: "Open report" button from search page to open report without saving the query *New feature: Option to ignore operation tracked in reports *New feature: Option to ignore operation grouped in reports -- Stephane MANKOWSKI Mon, 06 Aug 2012 12:24:18 +0200 skrooge (1.3.0) *Correction bug 291512: Show hide checked operations setting are not retained *Correction bug 291550: Advice (dashboard) about operations with empty category : case of transfers *Correction bug 292225: Skrooge 1.2.0 crash on opening report *Correction bug 293398: Display Graph windows during Account Creation *Correction bug 293397: Error on duplicate account name creation *Correction bug 293580: Select/unselect "import state" column will display empty field *Correction bug 293941: Skrooge crashed on deleting split operation *Correction bug 278220: Wrong values in Monthly Report "Amounts in accounts" *Correction bug 296204: add balance entered in Operations *Correction bug 297722: Copy/paste comment in the table of a split operation leads to a wrong behaviour *Correction: creation of subcategories with entered number *Correction: hide templates when open operations from other pages *Correction: Use radio button in "Show" menus when needed *Correction: Support import of gnucash file without "gnc:book" *Correction: Generate an error message when trying to import a missing ofx file *Correction: FastEdition does not work when more than one "operation" page is opened *Correction: Crash on QIF export when the document has 3 operations grouped with op1.value=-op2.value *Correction: Refresh of graphs when unit values are modified *Correction: Install the grantlee filter plugin into the correct location. *Correction: Avoid empty "Account" page when no account exist *Correction: No automatic resize of columns when "auto resize" is not check *Correction: Addition the "rate" in internet code tool tip. *Correction: Amounts are displayed with the right number of digits in "operation" and "account" table. *Correction: Refresh view when a new appearance is selected *Correction: Bad computation of fake operation in case of multi selection *New feature: Better display of "Show" menu in operation table *New feature: Colors in "Incomes and Expenditure" dashboard widget *New feature: "Search & Process" is now working on comments of sub operations *New feature: "Base 100" mode *New feature: Skrooge is now able to import file have amounts with unit symbole (example: -$8.35) *New feature: Possibility to pin/unpin pages -- Stephane MANKOWSKI Mon, 23 Apr 2012 11:45:09 +0200 skrooge (1.2.0) *Correction bug 288683: E: skrooge-common: arch-dependent-file-in-usr-share usr/share/kde4/apps/skrooge/plugins/grantlee/0.2/grantlee_skroogefilters.so *Correction bug 290626: No support of OFX format *Correction: Avoid suboperations pointing on unused category when all categories are deleted *Correction: Hide internal properties in property dock *Correction: A new document is no more considered as modified *Correction: Advice "xxx is an old tracker" modified to use the LASTDATE instead of the FIRSTDATE *Correction: Better display in "Income & Expenditure" dashboard widget + addition of "Saving" *Correction: In "Account" page, "Other ..." in icon list is now working *Correction: Correction for advice "Possible schedule 'xxx'" *Correction: Hide internal properties in graph *Correction: Bug on inline edition on comment & mode *Correction: Optimisation on "anonymize" function for big files *Correction: Highlight switch on category *Correction: In operations tab, provide a "show" menu as for other plugins *Correction: Avoid duplication of some categories when search and process is used *Correction: Avoid modifications in interest table *Correction: Fast edition refreshs the "comment" field *Correction: The autocompletion list for number displays only the numbers of the selected account *Correction: Monthly report create .kde directory event if .kde4 must be used *New feature: Fields of update part of the search & process panel are not editable to facilitate the completion *New feature: Import of non local files (example: http://myserver/document.qif) *New feature: Export of non local files (example: http://myserver/document.qif) *New feature: Dashboard > Shares & Indexes renamed to "Quotes" and provide a possibility to select all available Units (Objects, Currencies etc.) *New feature: Operations > Transfer: do not display a name of a chosen source account in the field of target account *New feature: New mode in reports *New feature: Memorize expanded groups in bookmarks *New feature: "Incomes & Expenditures" widget is clickable *New feature: Highlight on units *New feature: Addition of "Show" menu in scheduled operations *New feature: Hide title in "Scheduled operations" if at least one schedule is existing *New feature: Open "Scheduled operations" when an operation is scheduled *New feature: SKGTreeView scrollbars are sticked on maximum position *New feature: SKGTableWidget scrollbars are sticked on maximum position *New feature: New "Open operations" function in contextual menu (connected with double click - support multi selection) -- Stephane MANKOWSKI Mon, 09 Jan 2012 11:01:12 +0100 skrooge (1.1.1) *Correction: "Highlighted only" is by default disabled in "Account" widget *Correction: Mysterious crash in SKGTreeView::onExpand -- Stephane MANKOWSKI Wed, 23 Nov 2011 21:44:09 +0100 skrooge (1.1.0) *Correction bug 283683: Can not add a new operation after modifying the values on an existing one *Correction bug 284220: Closed account still showing up in accounts combobox of "operations" tab *Correction bug 283840: Skrooge is unable to download units for a past period, but it works for the current day ==> Better warning message *Correction bug 284073: Expressions in splitted operation amount are not calculated *Correction bug 283842: If I add today a past operation in a different unit than the principal, the amount calculated uses the present unit value, and not that of the specific date *Correction bug 284752: Skrooge does not look for Grantlee at build time *Correction bug 284843: OFX import does not work on UTF-8 encoded files *Correction bug 285289: Misspell found: reconciliation instead of reconciliation *Correction bug 285880: Cumulative amount of main categories do not appear *Correction bug 286538: Renaming categories doesn't rename relevant search/process rules (not fixed but better error management) *Correction: Better colors in "5 main variations" widget for dashboard *Correction: Installation of grantlee_skroogefilters.so in only one place and not hardcoded *Correction: No more error when importing skg file with payees *Correction: Addition of an error message on loading of a document generated by a most recent version (example loading on a 1.0.0 document into Skrooge 0.9.1) *Correction: Addition of missing date for x axis on unit graph *Correction: Import homebank set types of accounts *Correction: Possibility to remove an empty account without warning *Correction: Better performances during migration *Correction: Change language of the document on open if the language of KDE has changed *Correction: Better affectation of payees and comments during gnucash import *Correction: Better default size of the "category" panel in the split table to avoid manual resizing *Correction: Better performances during import of multi files by applying "search & process" rules only at the end *New feature: New type of account "Loan", transfer from/to this kind of account are considered as "expenditure" in reports *New feature: New function to remove useless values in unit (the curve is preserved but useless values are removed) *New feature: New tag for grantlee to be able to use standard palette. Colors of the "Default" template are coming from the KDE palette now. *New feature: Possibility to download values of units with regular expressions. *New feature: Possibility to create/modify monthy template directly from skrooge *New feature: More detail in progress bar *New feature: New advice to find and repair operations in groups with only one operation *New feature: New advice to find potential monthly schedule -- Stephane MANKOWSKI Mon, 21 Nov 2011 15:31:03 +0100 skrooge (1.0.0) *Correction bug 280362: Skrooge is not accepting dots or commas *Correction bug 280897: Unit wont set on mt940 import when there are existing operations *Correction bug 280915: The import logic should use an existing account based on bank name read from :20: and the account number read from :25: *Correction bug 282983: Multi-currency transactions not anchored to the exchange rate of the day of the transaction *Correction bug 283246: Some text is hard to read with dark color theme *Correction: Better performances in check box of operation, account, tracker pages *Correction: Grisbi import with split operations does not work *Correction: Capability to open read only file *Correction: Completion on substring available only in "Dropdown list" mode *Correction: To improve performances, the refresh of advices is done when dashboard is activated and only if refresh is needed *Correction: To improve performances, the refresh of models is done for views in current page *Correction: To improve performances, the refresh of graphs is done for graphs in current page *Correction: "Delete unused" of category page tries a delete only on categories really not used *Correction: Various correction in bookmarks (enable/disable in menu, bad management in parent/child relation) *Correction: Cascading delete in categories and bookmarks *New feature: New function to bookmark all opened page in one click *New feature: Addition of "Once a week" for scheduled operations *New feature: Merge of trackers by drag & drop *New feature: "Count" mode in reports *New feature: In table views, when at least one scroll bar is visible, the corner widget allows to display the contextual menu of the header *New feature: Graphs can be corrected by an indice defined in unit page *New feature: Less icon in tool bar by default. New "Fast edit" button in operation editor. *New feature: Add copy menu in contextual menu for cells *New feature: Advice for closed account with amount<>0 *New feature: "Autostart" and "Remove autostart" available in multi selection *New feature: In krunner, A string like "buy 10 ESSO" allows to quickly prepare add a new operation in skrooge. Advices in dashboard allows to finalize the creation *New feature: "Auto start" bookmarks are not opened if the key SHIFT is maintained pressed during the start of Skrooge *New feature: Grouping function in all tables *New feature: New menu to lock/unlock docks *New feature: Allow menu hiding *New feature: "Monthly report" widgets for the dashboard can be set on current month -- Stephane MANKOWSKI Mon, 03 Oct 2011 14:21:04 +0200 skrooge (0.9.1) *Correction bug 271294: Modifying transactions with spaces in their amounts causes them to be reset to 0 *Correction bug 275963: Operations imported in the primary currency unit, not the account unit *Correction bug 278004: Skrooge installs library files with wrong version numbers *Correction bug 278220: Wrong values in Monthly Report "Amounts in accounts" *Correction bug 279421: General reports problems/request *Correction bug 275956: Possibility to display different accounts in different currency units *Correction: Change icons and remove useless icons *Correction: Hide useless "Add" and "Update" buttons in amortization table of "Simulation" page *Correction: No display of initial value (0000) in graph when history mode is not selected *Correction: Now the forecast period is equal to the real period *Correction: Addition of "Add category" in contextual menu of "Category" page *Correction: Differentiation between "Sum" and "Pourcent" mode of PIE graphs *Correction: When "operation" page is an a particular account, the editor is cleaned with this account *Correction: Remove password when anonymize a document *Correction: Better performance by simulating "materialized views" with tables (used for categories and budgets) *Correction: In CSV import, if 2 "amount" columns are found then the first one is considered as a debit and the second one as a credit *Correction: During import, in case of doubt, MM_DD is preferred than DD_MM *Correction: Imports are supporting dates with backslashes like 29\06\2011 *Correction: Better performances *Correction: Saving the state of 'Categories Page' ignores the resized columns with (Auto resize: off) *Correction: CSV import supports multiline file like: date;amount;comment;type "1/1/2010";1000;"transfer 1 from account A to account B";TRANSFER "2/2/2010";2000;"transfer 2 from account A to account C";TRANSFER *Correction: Protection again empty date ==> if the user remove date string then the current date is used *Correction: Toolbar is realy configurable *Correction: Import of encrypted skrooge files *Correction: Better print when many pages are open *Correction: Missing gsb format in import file selection panel *New feature: Graphs in "Bank and Account" page *New feature: Addition of "Jump to the operation" in contextual menu of "Scheduled operations" page *New feature: Properties can be a copy of a file or a link to an existing file *New feature: In all pages, possibility to hide line by using operator - in "Search" field *New feature: Addition of "Highlight" status on catagories and payees *New feature: In reports, the first columns is resizable and has a tooltip for a better display *New feature: "Expand all" and "Collapse all" in category and bookmark trees *New feature: An option to set a frequency of units download (once a day/week/month) *New feature: Properties associated by drag & drop can be copied or linked (ALT+) *New feature: CTRL+C enables copying of selected cells of tables -- Stephane MANKOWSKI Mon, 15 Aug 2011 18:53:00 +0200 skrooge (0.9.0) *Correction bug 273692: Weird overlay in each dashboard widget *Correction bug 268933: Category editing is tedious and confusing *Correction bug 270207: Cannot enter positive value (credit) for operations in my account *Correction bug 270450: Add a wallet as a distinct account *Correction bug 271529: Add a search box to the Categories tab *Correction bug 271708: Wrong account transfer merging when importing QIF files *Correction bug 272863: Allow to choose which wallet store password in *Correction bug 274777: inconsistency between amounts&nb of operations displayed by modules Tiers, Categories and Operations *Correction bug 274993: Generation of forecast in a report depends on the option "auto-write" *Correction: Error during QIF import if unit is already existing *Correction: Open property file with space *Correction: Selected items always on top in graphs *Correction: Symbol in legend when "Point" is the selected mode of graph *Correction: Skrooge crashes on change of icon for folders in bookmark dock *Correction: Show progress bar only when needed *Correction: Bad values when customized dates are changed in reports *Correction: Better draw of pies in graphs *Correction: "Antialiasing" option in settings panel + automatic refresh of graphs after settings modification *Correction: "find and group transfer" does not work if 2 operations with same date and same amount *Correction: Homebank import supports budgets and scheduled operation *Correction: Change "Context" by "Pages" *Correction: Better computation of forecast period for "Scheduled" and "Budget" modes *Correction: Better performance in advice for scheduled operations *Correction: Better proportion in reports in BUBBLE mode *New feature: Formula is autorized in splitted amount (must start by =) *New feature: Ensure visibility of selected items in graph *New feature: New logo with rupee symbol *New feature: New button to reset internal filter in reports *New feature: Settings for "Reports" to select colors *New feature: Information zone in budget to display budgeted amount based on selected budgets *New feature: New contextual action "New category" on categories *New feature: Balance and balance of the day in account widgets (table, dashboard) *New feature: Merge of an imported operation with a manual operation is now possible even if amounts are different *New feature: Button on "Scheduled operations" to jump to the operation template for edition *New feature: New advice to align scheduled operation amount with the last amount inserted *New feature: New kind of graph "stack of columns" *New feature: New kind of graph (values in % of columns) *New feature: New setting to select the color of outline in reports *New feature: New setting to enable/disable balances computation -- Stephane MANKOWSKI Mon, 06 Jun 2011 14:00:49 +0200 skrooge (0.8.1) *Correction bug 259417: Units: graph unreadable when values are missing for some dates ==> "Show origin" allows to show/hide the origin of the graph for a better display *Correction bug 259416: Report: showing limits, average and tendency does not work in mode "Sum" *Correction bug 259414: Feature request: select previously selected tab when closing a tab *Correction bug 259412: Date chooser field: keyboard shortcuts do not work *Correction bug 257324: No icon for Skrooge in the Gnome menu *Correction bug 261001: Better integration on OS X *Correction bug 261318: Amount field calculator gives too many digits *Correction bug 262511: Wrong widget placement in properties subwindow *Correction bug 263263: Separate field for income and expenditure when importing CSV files *Correction bug 263716: Conversion multiple records to "transfer" type cause all have the same ammount *Correction bug 266703: Window exceeds screen size on Netbook *Correction bug 267442: Support for mt940 files *Correction bug 267773: Skrooge always start maximized *Correction bug 267996: Export CSV not unique identifier *Correction: Bad fullname and cumulative amount on categories after a drag and drop *Correction: Import csv with "sign" column before "amount" *Correction: All items are in "Skrooge" category in "Configure shortcuts" *Correction: No symbol for curves of indexes *Correction: "XX is an old tracker" advice does not give the right result when after 31 december *Correction: GNUCash import creates sometimes "wrong" splits with values close to 0 *Correction: Better initial state for the window (docks, maximized) *Correction: Bookmark of report *Correction: Many small correction in "interest" computation (tooltips, items in combo box, computation, ...) *Correction: Bad unit in "unit" page for units having a unit reference *Correction: Better tooltips in report (usefull for huge report where lines title is not visible) *Correction: Better management of codex for exports *Correction: Bad value when update of transfer is done from target account of the transfer *New feature: Import csv with ' as cote (for "Money Manager Ex" exports) *New feature: Import csv is now possible on file without header *New feature: Import csv supports more than one "category" column *New feature: Import "Money Manager EX" file *New feature: Change icon on bookmarks *New feature: "Open potential duplicates" *New feature: Massive update on budgets *New feature: Delete is more secured. *New feature: Force mode on delete. *New feature: Possibility to change the account of operations even when only operations of one account are displayed (useful for credit card) *New feature: New "Search & Process" panel *New feature: Property dock is able to display all properties *New feature: New "About" panel using KDE 4.6 features *New feature: Better mass update on "account", "payee", "tracker" and "unit" pages *New feature: Possibility to merge accounts by using massive update on name of accounts *New feature: Possibility to merge payees by using massive update on name of payees *New feature: Possibility to merge units by using massive update on name of units *New feature: Possibility to merge categories by using massive update on name of categories *New feature: Timeline in reports *New feature: Some fields are directly editable in view *New feature: Completion for all fields with operators (=upper and =lower for the moment) *New feature: New "stacked area" graph type *New feature: New "bubble" graph type *New feature: New button in "operation" page to freeze/unfreeze all fields with text *New feature: Better zoom widget in contextual menu of reports -- Stephane MANKOWSKI Mon, 14 Mar 2011 15:40:34 +0100 skrooge (0.8.0) *Correction bug 250350: Impossible to update an operation of a closed tracker *Correction bug 250403: Dashboard "Shares & Indexes" shows wrong percentaged variation *Correction bug 250677: Bank account choice do not use the country information *Correction bug 246973: Dashboard should be more customizable *Correction bug 251465: Wrong totals with second currency accounts *Correction bug 252869: Skrooge doesn't import KMM bank names correctly *Correction bug 255133: Skrooge crash on ofx import (With wrong data format. Bug in libOFX) *Correction bug 221207: Budget and forecast for accounts *Correction bug 256214: Skrooge after full screen mode I have only StartPage *Correction bug 257322: Installation doesn't depend from "QCA OSSL plugin for libqca2" (libqca2-plugin-ossl is not optional) *Correction bug 258307: comment from main split operation duplicated *Correction bug 258621: Skrooge crashes when KDE session is closed *Correction: Better dashboard display by using a flow layout *Correction: Bookmark of report having "Columns: -- Nothing --" *Correction: Support of "!type:prices" for QIF import and export *Correction: Better export KMyMoney *Correction: Better detection of double during imports *Correction: Protection again sql injection *Correction: Graph redraw even on hidden tabs *Correction: Crash on selection of a cell when graph is hidden in reports *Correction: Refresh of page in case of reset default state *Correction: Boorkmark of "operation" page in template mode *Correction: In report, hide columns or lines without property *New feature: On reports, average and limits are available if "All values in positive" is used too *New feature: Download of all additional information as properties for units (new setting to activate this mode) *New feature: Skrooge is able to store passwords in KDE wallet (new setting to activate this mode) *New feature: Scheduled operations with warning are in bold in dashboard *New feature: Show/hide properties as a column in tables *New feature: Auto point of imported operations to obtain the expected final balance *New feature: Reorder widget in dashboard by drag & drop *New feature: Floating panel in dashboard to remove or zoom widgets *New feature: Accounts can be merged by drag & drop (useful after an import) *New feature: Units can be merged by drag & drop (useful after an import) *New feature: Automatic import of csv columns as properties based on regular expression *New feature: New report capabilities *New feature: Sub total in reports *New feature: New advice for bank without account *New feature: New icons for banks of South Africa (Thank you David) *New feature: OR operator (+) supported in string filters *New feature: New contextual menu in html pages for export as pdf, odt, image and copy *New feature: Possible to show/hide items in context list *New feature: Forecast based on budgets *New feature: Multi selection in report table and graph *New feature: New "show" button *New feature: Better performances on dashboard *New feature: Better performances on tracker page *New feature: New function on operation: "Merge sub operations" *New feature: New advice for budgets *New feature: Possibility to dismiss kind of advices *New feature: Hide tendency line column -- Stephane MANKOWSKI Mon, 06 Dec 2010 15:31:21 +0100 skrooge (0.7.3) *Correction bug 245847: skrooge 0.7.3: 'pow10' was not declared in this scope *Correction bug 213786: Account balance is not displayed *Correction bug 246178: Dashboard "Income & Expenses" widget counting transfers *Correction bug 246408: Skrooge prints hardcopy *Correction bug 246977: In reports from selected data the date selection should be all data *Correction bug 247445: Linker error in skgbasemodelertest/skgtestnodes.cpp *Correction bug 246976: 'Select all' option in menu edit *Correction bug 249955: No password request after hardware crash *Correction: Better management of print option (collate, nb copy, from, to, last page first) *Correction: Do not authorize creation of operation with "-------" *Correction: In report, capability to create history with of property *Correction: In report, do not allow hiding table or graph by resizing *Correction: Import QIF with !Account section containing more than one account and with D attribute (Thank you Dennis) *New feature: Properties with a 'http' or 'file' url as value can be opened from skrooge (useful to set bank site on an account) *New feature: New daskboard component to know money per bank *New feature: Bookmarks in a menu *New feature: Context in a toolbar (useful for small screen) *New feature: Advice widget in dashboard *New feature: Full screen (useful for small screen) *New feature: Addition of file as property by drag and drop *New feature: Tables are scrolled "bottom" or "top" based on sort order -- Stephane MANKOWSKI Sun, 05 Sep 2010 07:36:37 +0200 skrooge (0.7.2) *Correction bug 237498: Skrooge crash on saving preferences (when system tray is not available) *Correction bug 238087: kAmountEdit widget in Operations plugin isn't properly localized *Correction bug 238477: Cannot open base if partition is full *Correction bug 240600: Skrooge must be able to export as a sqlite database *Correction bug 240640: Skrooge crash after password entered - input file DELETED at failure *Correction bug 234597: Gnucash import issues with two accounts with the same name *Correction bug 240601: Skrooge must be able to export an anonymized file *Correction bug 243738: Import of Gnucash file that has CNY currency fails *Correction bug 245254: Category creation failed on first level *Correction: Drag & drop of categories *Correction: Import skg file with tracker or interest simulation *Correction: No XML export of tables sqlite_sequence and sqlite_stat1 *Correction: Layouts compatible with small screen (1024x768) *Correction: Open right page when click on "Estimated interest" in dashboard applet *New feature: Zoom on tables by using CTRL+wheel *New feature: Search button is "Search & process" page to be able to search operations without creating a rule *New feature: Click on a column in "Search & process" editor removes the column *New feature: CTRL+F opens the "Search & process" panel with a condition based on current selection *New feature: Stability of colors in graph *New feature: Selection of colors in graph (saved and restored) *New feature: "Add property" to add easily properties *New feature: skg files saved on a FTP server can be loaded directly from Skrooge. Save is not possible. *New feature: New "Payee" page *New feature: Merge of payees by drag & drop *New feature: Report plugin is able to display graph based on properties *New feature: Possibility to select icon file for a bank *New feature: Any kind of file as property *New feature: Go home -- Stephane MANKOWSKI Sat, 24 Jul 2010 10:00:00 +0200 skrooge (0.7.1) *Correction bug 233895: Switching account from 1 type to another with multi-sel is modifying the initial balance *Correction bug 233930: QIF address field is not imported *Correction bug 234595: Better handling of category deletion ==> Reparent operations on parent category when a category is removed *Correction bug 234608: Some gnucash notes are lost during import phase *Correction bug 234771: Problem importing ofx file *Correction bug 234845: Bad Account after importing ofx *Correction bug 235689: Cannot localize quotation marks *Correction bug 234596: Customisable date format in operations panel *Correction bug 236753: Search but not process on attribute *Correction: Rename "Import CSV unit..." in "Import currency values..." *Correction: Better management of constraints in data model *Correction: Conflict on categories when importing twice a gnc document *Correction: Conflict on categories when importing twice a xhb document *Correction: Conflict on categories when importing twice a gsb document *Correction: Conflict during property update *Correction: Modification of trackers in splitter operations from "Search and process" *Correction: Transfer when signe + is specified before the value *Correction: Various modifications on "Search & Process" *Correction: Replacement of [%1] by '%1' for localization *Correction: No more direct sqlite prerequisit *New feature: Better performances on "File/New" (first Save is longer) *New feature: Usage of KNewPasswordDialog and KPasswordDialog for password protection *New feature: Applet for dashboard to display tip of the day *New feature: CSV import of splits and transfers *New feature: CSV import is able to oncatenate many attributes in "comment" or "payee" *New feature: CSV import is to import unknown attributes as properties *New feature: Export XML *New feature: "Search & Process" is able to search on properties values *New feature: "Search & Process" is able to update, insert and delete properties (prop='' to delete it) *New feature: All currencies are now available in unit page (Thanks to KCurrencyCode) *New feature: Properties are displayed on tooltips *New feature: Open property picture associated to an object -- Stephane MANKOWSKI Mon, 10 May 2010 15:21:33 +0200 skrooge (0.7.0) *Correction bug 225855: Monthly Report: difference in percentage is wrong *Correction bug 225980: Share download not in primary currency : value not correct *Correction bug 226451: .skg file incorrectly identified as password-protected ==> New document icon to identify encrypted files *Correction bug 228808: Gnucash import: scheduled operation at 0 euros *Correction bug 228904: Gnucash import should not take into account recurrent operation containing loan formulas *Correction bug 230175: Sometimes report plugin resizes Skrooge over the screen size *Correction bug 232937: Search & Process : if a category has no operation yet, it doesn't appear in the possible categories for "update" *Correction wis 228901: Manage Liability accounts (loan, etc...) *Correction wis 197409: There's no way to define initial balance of non-OFX account *Correction wis 224933: A legend in the graphics *Correction wis 224042: Possibility to store several CSV import schemes ==> Implemented by regular expression in automatic mapping. *Correction wis 225818: Change skrooge desktop file description *Correction wis 226963: Export CSV of split operations *Correction wis 228170: Skrooge must be able to import skg file *Correction of forecast computation on scheduled operations *Correction of export of "Initial balance" for QIF and CSV *Correction of import of "Initial balance" for QIF and CSV *Correction of import of "Initial balance" for OFX *Correction: Better error message in case of repository of document is RO *Correction on confirmation message *Correction selection on graph (histogram and stack) *New feature: "Weighted moving average" in reports *New feature: Specific font and color for disabled schedule (nbtime = 0) *New feature: Addition of "First date" and "Last date" in trackers *New feature: Amortization table *New feature: import gnucash document *New feature: import kmymoney document *New feature: import skrooge document (can be used to merge documents) *New feature: import grisbi document *New feature: import homebank document *New feature: export kmymoney document *New feature: export skrooge document (without history) *New feature: possible to create a bookmark even when a bookmark is already selected *New feature: button to clean history (reduce the size of the file) *New feature: all settings in only one file. WARNING: check your settings. *New feature: generic modeler is ready to be used by other applications. *New feature: "5 main variations" in monthly report. *New feature: New key accelerator to enable editor of current page -- Stephane MANKOWSKI Mon, 05 Apr 2010 20:00:00 +0200 skrooge (0.6.0) *Correction wis 215668: Dashboard is too big to be a real dashboard *Correction bug 216520: Incorrect import of a transfer when inside a splitted operation (a splitted operation can not be a transfer) *Correction bug 217896: UK Currency and Date formats displayed for Scheduled Transactions in Dashboard *Correction bug 217743: Configuring Banks and Accounts Section (Bank name update issue) *Correction bug 219791: No progress bar during export QIF *Correction bug 219750: Delete key in split table remove the full line *Correction bug 214508: Provide a balance evolution graph *Correction wis 220659: Option to "Apply rules on to imported operations" automatically after an import *Correction cra 220936: Crash on double click on bookmarks *Correction cra 222340: Freezes after some time *Correction bug 222339: CVS import: problem with decimal point and comma *Correction wis 220663: Selected operations must still visible after a sort modification *Correction wis 223848: make libofx an optional dependency *Correction wis 224676: keyboard shortcut for modify and add operation *Correction wis 209314: key scrolling does not work, and click on a line has odd behaviour *Correction bug 224932: Graphic Report SVG export bug + wish on a legend *Possible to define favorite account *Possible to define favorite search *New gui for search and process *Delete icon on each suboperation line *Compatibility with bespin theme *Do not collapse tree after editing one of its items *More options in "Report" page *New function to delete unused categories *Selection in pages list is now synchronized with current page *New option in contextual menu of report to hide bottom tool bar *Edition of splitted operations by single click *Clean button in operation table is renamed "Clear form" *Better export QIF for investment *Better display on reports (average, min and max are displayed if only one curve is drawn) *Better display on reports (linear regression is displayed if only one curve is drawn) *Option to show/hide average and limits in graph *Selection of year for interets computation *Correction in sum of operation computation when suboperations are selected *Graph proportion adapted to view size *"Account position" is replaced by "Ending balance" *Avoid cpu loop when double click on operation fields on KDE 4.4 *Completion based on substrings *Better import of QIF files when both side of the import do not have exactly the same date *Correction on update category and tracker for transfers *Completion on comments -- Stephane MANKOWSKI Sat, 06 Feb 2010 09:00:00 +0100 skrooge (0.5.5) *Disable some functions on sub-operations *Correction on update of a splitted operation by a split returned by Fast Edition *Correction bug 215995: SQL Error when attempting to display a report in history mode *Correction bug 215754: Invest account is incorrectly imported as current account *Correction bug 214809: Incorrect import of a transfer *Correction bug 214851: Incorrect import of 'investment account' QIF file *Correction bug 216348: Account filters synchronisation problem in the operation HMI *Correction bug 216522: Incorrect import of transfer (twice imported) *Correction bug 216551: Click in blank area make 'date' widget to extend its size *Correction bug 216514: Incorrect import of QIF file when account names are similar *Correction bug 216520: Incorrect import of a transfer when inside a splitted operation (transfer of suboperation is not supported) *Correction crash 215992: Skrooge crash when clicking on "rapport" menu *Correction regression on "Open report" (P0) *Invertion of colors in report (more saturation for new operations) -- Stephane MANKOWSKI Sun, 29 Nov 2009 15:00:00 +0100 skrooge (0.5.4) *Correction bug 211579: Irregular percent value in monthly report amounts in accounts *Correction bug 212313: Can not update a lot of operations *Correction bug 211029: Skrooge should have an better account evolution graphic *Correction bug 213783: Account balance computation is inaccurate *Correction bug 214045: Import CSV date format problem *Correction bug 214097: Can not search on multiple criteria. (OR is not supported) *Correction bug 214157: Impossible to import an ofx file from a directory containing special characters *Correction bug 214462: Does not use primary currency unit when importing, and does not warn on import of splitted operation with multiple currencies *Correction bug 214447: Auto save the open document at closing *Correction bug 214794: Incorrect report of warning when importing QIF file *Correction bug 214809: Incorrect import of a transfer *Correction bug 214849: CSV export from grid is not correct *Correction bug 214904: Can not download a stock/share quotation *Correction bug 214851: Incorrect import of 'investment account' QIF file *Correction bug 215114: Button to customize dashboard *Correction bug 215620: Can not import QIF file with skrooge version SVN 1052520 *Correction bug 215656: History reports are wrong if first date is not selected *Correction bug 215658: Some editors are modified when a bookmark is created *Correction on double click of a template of transfer *Update of both side of a transfer is now possible *Only one fast edition. User is be able to lock some fields before. *Interest can be computed with 360 and 365/366 days method *New splashscreen size *New graph gui with "Quarters", "Semesters", "Weeks" and "Days" *Zoom with CTRL+wheel on graph *Dashboard is automatically launched when a new document is created *Use of graph component in unit page *New button to clean editor in operations page *Correction on scheduled transfers *New report widget for dashboard (all reports can be added to dashboard) *Addition of "Del" shortcut to delete suboperations in split panel *New tooltip on operation status *New function "Open sub operations" to display all sub operations. Useful to filter them. *New function to reconciliate an account from bank page *Better QIF import/export of account type -- Stephane MANKOWSKI Mon, 23 Nov 2009 14:00:00 +0100 skrooge (0.5.3) *Correction bug 209451: Display quantity of each unit *Correction bug 209457: Number of decimal for each unit must be different *Correction bug 209453: Impot must avoid double even when operations are not validated *Correction bug 209529: Unable to reconcile. Delta zero but "Validate checked operations" tick still grayed out *Correction bug 208939: "Search and process" does not work anymore *Correction bug 209610: Skrooge doesn not work if "Maximum undo depth" is 0 *Correction bug 209542: Automatic conversion of schedule *Correction bug 209672: Amount of indexes must be displayed without unit symbol *Correction bug 209705: Importing investments from csv doesn't import the dollar amount of shares purchased *Correction bug 209705: Find&Group is now able to detect share purchase/sale *Correction bug 209702: Need the ability to be able to manually group transfers *Correction bug 209914: executable bits set for skgalarmboardwidget.h *Correction bug 209905: currency import is broken *Correction bug 209912: rpmlint warnings after installation: unused-direct-shlib-dependency *Correction bug 209053: Savings account support request *Correction bug 210946: columns are always resized to content when opening operations tab *Save icon in tab bar to overwrite bookmarks or current context *New dashboard plugin for highlighted operations *New dashboard plugin for estimated interests *"Backward" & "Forward" navigation on pages *New unit "Swedish krona" *New command to open operations modified during last user action (useful after an import or a processing) -- Stephane MANKOWSKI Mon, 19 Oct 2009 12:00:00 +0200 skrooge (0.5.2) *Correction bug 207927: skrooge summary field uncomplete bank account name *Correction bug 208130: 'Import CSV Unit' menu puts data into the 'Operations' tab *Correction bug 208210: Multiple clause research/update in french *Correction bug 208194: Skrooge loose all data on file migration *Correction bug 208040: Error when entering shares information *Correction bug 208459: Skrooge crashes when changing tab *Correction bug 209317: key scrolling very long *Better performance in report by using QTimer *Better performance bank page by using QTimer *New SKGDateEdit with more features *Delivery of default categories and bookmarks for pt. Thanks Caio de Campos Ferreira. *Better performance when opening pages *Correction on monthly report for a better display with dark theme *New widget on dashboard for alarms *SKGDateEdit validation on lose focus *Automatic detection of CSV separator during import -- Stephane MANKOWSKI Sun, 04 Oct 2009 16:00:00 +0200 skrooge (0.5.1) *Correction bug 205471: Impossible to know how to check an operation *Correction bug 205466: Date missing in reports *Correction bug 193426: Ability to create from scratch a "recurrent operation" *Correction bug 203787: Balance should be displayed for each operation in the operation context. Correction done: balance is displayed on tooltip because it is better for performances than in column. *Correction bug 206894: Crash second import CSV *Correction bug 206459: "Search & process" must be able to do complex update *Correction bug 199539: Dashboard must be customisable *Correction bug 207249: rpmlint error: debuginfo-without-sources (including a fix) *Correction bug 207246: rpmlint warning shared-lib-calls-exit /usr/lib64/libskgbasemodeler.so.0.5.0 exit@GLIBC_2.2.5 (for fedora packaging) *Correction bug 207232: skrooge must use kfilterproxysearchline *Correction bug 207274: "Fast edit" behavior must be modifiable by settings *Correction bug 191966: Treeviews collapsed when updated *Correction bug 207672: Align amount values on the right for cleaner views *Correction bug 207713: Display some information after applying a process *Correction bug 200790: Search creation doesn't take not validate predicate *New function to create template of operations *New function to schedule templates *New function to create template from existing operations *Double click on template creates the operation *New shortcut for import *Attribute to define the maximum number of occurrence for scheduled operations *Attribute to define the last occurrence date *A setting allows to create automatically a template when an operation is scheduled *Selection is done on duplicated object after a "Duplicate" *Selection is done on created template after a "Create template" *Correction message in history when an object is deleted *Download button always visible on unit plugin *Infinite symbol when number of occurrences is not checked *Addition of "Custom..." on graph dates *New spash screen *New function to overwrite bookmarks after a modification *Filter capability on "search & process" table *Editors are no more clean when the selection is empty. A second click is needed -- Stephane MANKOWSKI Sun, 20 Sep 2009 00:00:00 +0200 skrooge (0.5.0) *Correction bug 201316: import qif extra tag support *Correction bug 201157: Graphs no longer displayed *Correction bug 201289: Compiler error on GCC 4.1.2 (enum with KDE_EXPORT or similar macro) *Correction bug 201451: qif import other liability account type *Correction bug 201697: Pointed operation can be deleted *Correction bug 201800: Filter issue with number formatting *Correction bug 202167: Payee list should be ordered in a case insensitive way *Correction bug 202341: Combobox lists are not sorted in a locale-aware way *Correction bug 202384: Skrooge always wants to update report bookmarks on exit *Correction bug 202636: Hidden columns are sometimes displayed *Correction bug 203894: Skrooge crashes when launched with --nofork *Correction activation of "Values" button in "Units" page *New password is no more displayed when changed *New function to merge an imported operation with an operation manually entered *New refund icon *New widget for dashboard "Shares and indexes" *Modification titles on "operation" pages to differentiate "operations" and "sub operations" *"sub operations" can be identified by a specific font and color (see settings) *Correction bug: Created search is not selected after creation *Correction performance issue on zoom when antialiasing is enable *Addition of 5 main categories of expenditure in monthly reports *Rename "Bookmark" for operation by "Highlight" *Rename "Trait" by "Process" *Set minimum size for amounts fields *Only one "Import..." command for all supported format. *Support of QFX import *New settings for import CSV *Dashboard is now clickable *Dashboard is modifiable (see contextual menu on each widget) and state can be saved *Addition of "Fast edition" without amount modification. It is useful to modify imported operations *Only one instance of skrooge can be launched. *Imports can be done in command line. Example "skrooge myfile.ofx" with skrooge running *If an invalid expression is entered for the amount, the field is written in red, and the expression is kept to allow correction from the user (previously, 0 was displayed). *"New tab" is now managed by Ctrl+Shift+T *Popup to ask if you want to save current state of pages. *Bookmark storage is no more dependant of language translation -- Stephane MANKOWSKI Fri, 28 Aug 2009 21:00:00 +0200 skrooge (0.3.0) *Correction bug 191970: Attach receipts (images) to transactions *Addition of "Trackers" for lines in report *Correction bug 195254: Do not allow to link operations to a closed tracker *Correction bug 195026: A setting must allow to clean history when the application is [saved] *Correction bug 194826: End user must be to validate an import *Correction bug 196444: Can not validate reconciliation (delta = -0.00) *Correction bug 196745: Categories are not added to a split operation *Correction bug 197287: Add backup file management *Correction bug 197288: Manage working document copy *Correction bug 197835: Reconciliation mode : currency problem *Correction bug 198077: Comments do not appear in every Operations windows *Correction bug 198583: foreign currency accounts should display in their native currency in dashboard. *Correction bug 198786: Categories are not easily read *Correction bug 199196: build error in skgbankgui *Correction bug 199543: Splash screen display must be defined by settings *After an import, skrooge is able to execute some rules to clean imported operations *Correction in dashboard *Addition of "Reset state" on tabs to reset default state of plugins *Most important category and refund are displayed for split operations *Display detail of selected operations in information area of "operation" page *Main tab position can be selected in settings -- Stephane MANKOWSKI Sat, 11 Jul 2009 16:00:00 +0200 skrooge (0.2.9) *Correction bug 2787146: Single click on bookmarks *Correction bug 191972: Selection is not well kept *Correction bug 191975: Add Labels for X values in histograms and stack reports *Correction bug 191968: Information string on top of page is too long (no word wrap) *Correction bug 192687: fonts too large on report *Correction bug 192832: Do not take amount sign into account for transfers *Correction bug 191967: Skrooge must be able to display an history global and for each account. *Correction bug 193423: context list scrolls down only after 8 mouse molette rotation *Correction bug 193431: "recurrent operation" trigger can not be set on D day *Correction bug 193421: bugs to be registered via bug database (not email) *Correction bug 194650: Fast edit must work on Tracker attribute *Correction bug 194765: Number of operations by account must be displayed in bank plugin *Addition of bank icon on account combo boxes *Addition of Canadian dollar *Addition of one more view (based on selection) in operation plugin *Better managment of dependency between units *New settings on unit download *Skrooge tries to find the most adapted account during import file without account information inside *Update of nls part of data model when language is changed *"Open report" on an element of a report open a new report with exactly same settings than first one *Addition of "scheduled operations" in dashboard plugin *New operation editor *Better management of messages in status bar *New editor in unit plugin *Middle click is able to open new page from context or bookmarks -- Stephane MANKOWSKI Sun, 31 May 2009 23:00:00 +0200 skrooge (0.2.8) *Correction bug 2782399 :Skrooge must create a backup file *Correction bug 2783111 :Typo *Correction bug 2515571 :New plugin to follow refunds *Correction bug 2785938 :Single click *Correction bug 2786183 :Load standard categories? *Correction bug 2682777 :Label are not well placed *Correction bug 2579926 :Improve category plugin performances *Correction bug 2665265 :Edit names directly in treeview *Correction for amount comparison in validation mode *Correction import ofx when bankid is empty in ofx file *Correction mime type for KDE4 *Better performances on open document with password required -- Stephane MANKOWSKI Mon, 04 May 2009 15:00:00 +0200 skrooge (0.2.7) *Correction bug 2513827 :global print function *Correction bug 2692667 :Automatic icon resize is driven by bookmarks only *Correction bug 2714592 :Skrooge must be able to manage properties on all objects *Correction bug 2733958 :Auto hide *Correction bug 2747379 :Only allow to "pre-check" operations *Correction bug 2750464 :Impossible to update the date of a split operation *Correction bug 2778333 :Enhance hidden panels discoverability *Correction bug 2777697 :bookmark modifications are not kept when closing skrooge *Old method to split an operation is no more available *"Undo document" is no more in toolbar by default *Remove useless icons from tool bar *When "Save" is clicked in a new document, automatically interpret it as "Save as" *New menu with shortcuts to open pages *Better automatic linear scale in reports -- Stephane MANKOWSKI Mon, 27 Apr 2009 15:00:00 +0200 skrooge (0.2.6) *Correction bug 2692651 :antialias on graphs *Correction bug 2692665 :Wrong currency label in stock tab *Correction bug 2692605 :Title of a report for a selection contains only ",,,," *Correction bug 2692648 :New dialog box on exit *Correction bug 2692664 :add support for split & grouped operations in fast edition *Correction bug 2692656 :More details on recurrent operations view *Correction bug 2645610 :Bad performance on "find transfers" *Correction bug 2692681 :Reconciliate mode in operations view *Correction bug 2706987 :no report generated *Correction bug 2716734 :Better category & unit creation during operation creation *Correction bug 2720760 :Popup messages are displayed twice -- Stephane MANKOWSKI Sun, 29 Mar 2009 20:00:00 +0200 skrooge (0.2.5) *Correction bug 2664613 :Not possible to show a column without reseting all *Correction bug 2633375 :2 columns for quantity *Correction bug 2674862 :Bad performances on undo/redo for categories *Correction bug 2675606 :Bookmark reorder doesn't work *Correction bug 2685241 :Add postive sign in amount field for positive operations *Correction bug 2685236 :Option to ask again if modified bookmark should be saved *Correction bug 2685270 :Impossible to modify comment on operation and sub operations *Correction bug 2687115 :filter value is not save whan bookmark a report *Correction bug 2685335 :Pie like in firelight *Debug plugin is able to do a "EXPLAIN QUERY PLAN" *Path for bash is not more hardcoded in script for BSD compatibily -- Stephane MANKOWSKI Mon, 16 Mar 2009 14:00:00 +0100 skrooge (0.2.4) *Correction bug 2608762 :Cannot create a bookmark folder if no bookmark exist yet *Correction bug 2633444 :Add "import std categories" in import menu *Correction bug 2638120 :Unable to import cvs or qif from "la banque postale (fr) *Correction bug 2564982 :Creation of default bookmark *Correction bug 2640959 :Impossible to import OFX file -- Stephane MANKOWSKI Mon, 02 Mar 2009 20:00:00 +0100 skrooge (0.2.3) *Correction bug 2608762 :Creation of category branch in one shoot *Correction bug 2608768 :Crash in category creation *Correction bug 2586878 :skrooge crashes if category too deep *Correction bug 2446175 :better split operations *Correction bug :sum column always displays 0 in category page *Addition of comment on suboperations *Better performances to compute next values for operation numbers *Icon in system tray *"export SKGTRACESQL=xxx" is able to trace all sql order taking more than xxx ms -- Stephane MANKOWSKI Mon, 23 Feb 2009 21:51:12 +0100 skrooge (0.2.2) *Correction bug 2556346 :README should list kdesdk-scripts as buildtime dependency *Correction bug 2556406 :Pound sterling missing in currency list, difficult to add *Correction bug 2556340 :CMakeLists should use correct libraries and check for Sqlite (Thank you lindevel for the patch) *Correction bug 2555861 :"make package_source" contains too many files *Correction bug 2557366 :Wrong password *Correction bug 2556381 :Impossible to change negative quantities into positive ones? *Correction bug 2530932 :Better autostart bookmarks management -- Stephane MANKOWSKI Wed, 11 Feb 2009 21:51:12 +0100 skrooge (0.2.1) *Correction bug 2517386 :Move of category is not done *Correction bug 2519334 :Smooth scolling in category view *Correction bug 2517388 :Selection must be set on created operation *Correction bug 2519847 :Duplicate operation *Correction bug 2520516 :Security of skg file *Correction bug 2545021 :compilation fails because po/listFiles.sh is not executable *Correction bug 2549911 :Import standard categories *Correction bug 2526148 :Double click on graph in report *Correction bug 2520530 :KToolBarPopupAction for undo/redo *Addition of icon for stocks *Bookmark can be deleted from contextual menu *Icons are resized relative to list width -- Stephane MANKOWSKI Sun, 01 Feb 2009 20:00:00 +0100 skrooge (0.2.0) *Correction bug 2489823 :automatically remember changes on columns for bookmarks *Correction bug 2487934 :Specific Column for "scheduled" icon *Correction bug 2487866 :deselect lines in table views *Correction bug 2487981 :add a column for total of operations including subcategories *Monthly report is now base on QWebView and contain google graph *Addition of exports in report tables (TXT, CSV) *Report can be opened from bank, operation or unit page *Report can be opened from report *Better graph *Addition of print *Long transaction can be interrupted *Better warning message with history -- Stephane MANKOWSKI Mon, 19 Jan 2009 20:00:00 +0100 skrooge (0.1.9) *Better contextual menu on tables *New feature in monthly report *Better performances for monthy report generation *Better graphics in report plugin *Addition of exports in all tables *Addition of exports in report graphs (PDF, SVG, picture) -- Stephane MANKOWSKI Sat, 03 Jan 2009 20:00:00 +0100 skrooge (0.1.8) *Correction bug 2299303 :Calcul de balance erroné *Correction bug 2446162 :Distinction for future operations *Correction bug 2446184 :Reduce spacing between rows *Correction bug 2256687 :No more icon in application menu *Correction crach in qtdesigner due to SKGTableView *Addition "open bookmarks" to display all bookmarked operations *Addition of sale of stocks *Addition of "split of stock" -- Stephane MANKOWSKI Tue, 22 Dec 2009 20:00:00 +0100 skrooge (0.1.7) *Correction bug 2385144 :Unexpected display of unit in operations list *Correction bug 2390926 :Problem with Action/$/€ *Correction bug 2390747 :Operations transferred not found *Correction bug 2384834 :Multi-Selection and Ctrl-P does not work *Correction bug 2311993 :Difference between operation and valuation not done *Correction bug 2385059 :Possibility to remove (modify) buggy unit value *Correction bug: Inversion year(s) and day(s) in recurrent operations *Correction wrong mapping on all table when column are reordered *Correction request 2379612: categories edition & creation *Selection is now kept after modifications *New "Monthly report" plugin *Computation of RIB key *Addition contextual menu on all table *Addition contextual menu on tabs *Addition of short date in tooltip on fancy date *Addition of smooth scrolling in table views *Addition of indexes (CAC 40, NASDAQ, ...) in data model -- Stephane MANKOWSKI Tue, 15 Dec 2009 20:00:00 +0100 skrooge (0.1.6) *Support of import unit values in CSV format like: date;value 01/01/2008;50 03/03/2008;60 *Correction bug 2340201 :crash on QIF export *Correction bug in import if 2 operations with same attributes (date, amount, ...) *Correction concerning performance issue in all tables *Correction bug 2299354 :Ability to change and memorize column width *Columns can be switched in "auto resize" mode *Correction bug 2298982 :An account shall have a currency *Preferred table's organisation can be save as default *Better organisation of pies in report plugin -- Stephane MANKOWSKI Tue, 01 Dec 2009 20:00:00 +0100 skrooge (0.1.5) *Correction bug 2307068: Incorrect import of QIF file *Columns order is now saved in bookmark for operation, account, recurrent operations and unit plugins *Sort is now saved in bookmark for operation, account, recurrent operations and unit plugins *Correction bug 2327676: Many import QIF correction *Columns can be show or hidden (see contextual menu) and this state is saved in bookmarks *Better performances (x100) in report. *Correction bug 2316459: skrooge does not support out-of-source build *Correction bug 2298621: Unable to delete a "principal currency". ==> It is now possible to delete a unit except if this unit is already used by at least one operation *Correction bug 2326576: Field empty by default *Correction bug 2306914: "Tip of the day" dialog can not be removed -- Stephane MANKOWSKI Tue, 24 Nov 2009 20:00:00 +0100 skrooge (0.1.4) *New icons *Bookmarks folders are opened sorted and focus is set on the first one *Correction (inversion sign of operations) in transfer creation *Buy stock is now possible *Correction bug 2298773: Unit and amount are not aligned *Correction bug 2298674: Montant en EUR même si unité EUR n'existe pas *Correction bug 2298471: Unable to change type of a unit *Correction bug 2299384: File/Close closes the current page *Correction bug 2299524 *Correction bug 2299519: "Mode" should not be mandatory *Optimisation in open "operation" pages *Correction bug 2299600: Values of a unit are not sorted out *Correction bug 2299947: Unit can not be used if no symbol is defined ==> Symbol is now mandatory *Correction bug 2301337 *Correction bug 2300013:Une ventilation est une catégorie *Correction bug 2278703:Zoom fit when opening report tab *Comment on account *Tab name is now set with the name of the bookmark -- Stephane MANKOWSKI Tue, 17 Nov 2009 20:00:00 +0100 skrooge (0.1.3) *Vertical alignment in all views *Detection of the sign of an operation (during creation) based on category *Average in report *Sum column is now displayed only if more than one column is displayed in report plugin *Correction bug in report when sort is set on last column and the report is refreshed with less columns *Correction abend on delete *Modeler is now able to store messages on transaction. *Display messages by notification *Addition of recurrent operations (creation, update, delete, automatic insertion, warn, ...) *Correction in duplication of recurrent operations: Now, status, bookmark, importation id are not duplicated *Correction on optimisation of undo/redo transaction: optimisation removed :-) *Multi selection is supported by recurrent operations creation icon *Massive update on recurrent operation *Implementation enhancement 2272115 concerning calculator behavior *Correction update of split operations *Set default order in all tables *Sort bookmark by drag and drop -- Stephane MANKOWSKI Sat, 14 Nov 2009 20:00:00 +0100 skrooge (0.1.2) *Support of categories in QIF import *Support of csv file with empty lines *Support of categories in QIF export *Correction bug 2229770: automatic erase of duplicated operations *New design for operation and account plugin *Addition of first draft of recurrent operations -- Stephane MANKOWSKI Tue, 10 Nov 2009 20:00:00 +0100 skrooge (0.1.1) *Optimisation widget refresh after a huge QIF import *Optimisation performance of QIF export *Optimisation performance of CSV export *Optimisation performance of "find and Group transfers" *Addition of "Close", "Close All" and "Close All Other" to manage pages *Correction on download unit *Addition of the name of the file in the title of the man window *Addition of sort in report plugin -- Stephane MANKOWSKI Tue, 03 Nov 2009 20:00:00 +0100 skrooge (0.1.0) * QIF import/export * CSV import/export * Basic graphs * Several tabs to help you organize your work * Infinite undo/redo (even after the file was closed !) * Instant filtering on operations * Infinite levels of categories -- Stephane MANKOWSKI Mon, 02 Nov 2009 20:08:00 +0100 diff --git a/plugins/generic/skg_statistic/skgstatisticplugin.cpp b/plugins/generic/skg_statistic/skgstatisticplugin.cpp index aa78e936d..67bc8eda5 100644 --- a/plugins/generic/skg_statistic/skgstatisticplugin.cpp +++ b/plugins/generic/skg_statistic/skgstatisticplugin.cpp @@ -1,264 +1,266 @@ /*************************************************************************** * Copyright (C) 2020 by S. MANKOWSKI / G. DE BURE support@mankowski.fr * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see * ***************************************************************************/ /** @file * A plugin to generate statistic * * @author Stephane MANKOWSKI */ #include "skgstatisticplugin.h" #ifdef HAVE_UNAME # include #endif #include #include #include #include #include #include #include #include #include #include #include "skgmainpanel.h" #include "skgtraces.h" /** * This plugin factory. */ K_PLUGIN_FACTORY(SKGStatisticPluginFactory, registerPlugin();) SKGStatisticPlugin::SKGStatisticPlugin(QWidget* iWidget, QObject* iParent, const QVariantList& /*iArg*/) : SKGInterfacePlugin(iParent), m_currentDocument(nullptr) { Q_UNUSED(iWidget) m_timeInit = QDateTime::currentDateTime(); SKGTRACEINFUNC(10) connect(SKGMainPanel::getMainPanel(), &SKGMainPanel::currentPageChanged, this, &SKGStatisticPlugin::pageChanged); connect(SKGMainPanel::getMainPanel(), &SKGMainPanel::pageOpened, this, &SKGStatisticPlugin::pageOpened); } SKGStatisticPlugin::~SKGStatisticPlugin() { SKGTRACEINFUNC(10) // Set duration m_stats[QStringLiteral("avg.exec_time_sec")] = (m_stats.value(QStringLiteral("avg.exec_time_sec")).toDouble() * (m_stats.value(QStringLiteral("nb_launch")).toInt() - 1) + m_timeInit.secsTo(QDateTime::currentDateTime())) / m_stats.value(QStringLiteral("nb_launch")).toInt(); // Write stat file writeStats(); m_currentDocument = nullptr; } bool SKGStatisticPlugin::setupActions(SKGDocument* iDocument) { SKGTRACEINFUNC(10) m_currentDocument = iDocument; setComponentName(QStringLiteral("skg_statistic"), title()); setXMLFile(QStringLiteral("skg_statistic.rc")); return true; } void SKGStatisticPlugin::refresh() { SKGTRACEINFUNC(10) if (m_currentDocument != nullptr) { if (m_currentDocument->getMainDatabase() != nullptr) { static bool initialisationDone = false; if (!initialisationDone) { // Connect actions QMap > actions = SKGMainPanel::getMainPanel()->getGlobalActions(); QStringList keys = actions.keys(); for (const auto& k : keys) { QPointer act = actions[k]; connect(act.data(), &QAction::triggered, this, &SKGStatisticPlugin::triggerAction); } initialisationDone = true; } QString doc_id = m_currentDocument->getUniqueIdentifier(); if (m_docUniqueIdentifier != doc_id) { m_docUniqueIdentifier = doc_id; // Initialize QString appname = KAboutData::applicationData().componentName(); QDir::home().mkdir("." % appname); QString docUUID = QString(QCryptographicHash::hash(m_currentDocument->getCurrentFileName().toLatin1(), QCryptographicHash::Md5).toHex()); m_file = QDir::homePath() % "/." % appname % "/" % docUUID % ".stats.txt"; // Read previous stat file readStats(); // Initial values if (!m_stats.contains(QStringLiteral("init.date"))) { m_stats[QStringLiteral("init.date")] = QDate::currentDate(); m_stats[QStringLiteral("init.qt_version")] = qVersion(); m_stats[QStringLiteral("init.app_name")] = appname; m_stats[QStringLiteral("init.app_version")] = KAboutData::applicationData().version(); } m_stats[QStringLiteral("nb_launch")] = m_stats.value(QStringLiteral("nb_launch")).toInt() + 1; // Current values m_stats[QStringLiteral("current.date")] = QDate::currentDate(); m_stats[QStringLiteral("current.qt_version")] = qVersion(); m_stats[QStringLiteral("current.app_version")] = KAboutData::applicationData().version(); m_stats[QStringLiteral("current.language")] = QLocale::languageToString(QLocale().language()); m_stats[QStringLiteral("current.country")] = QLocale::countryToString(QLocale().country()); + m_stats[QStringLiteral("current.country.code")] = QLocale().name().split("_").at(0); + m_stats[QStringLiteral("current.locale")] = QLocale().name(); // OS #ifdef Q_OS_WIN32 QString os = QStringLiteral("Windows"); #elif defined(Q_OS_FREEBSD) QString os = QStringLiteral("FreeBSD"); #elif defined(Q_OS_NETBSD) QString os = QStringLiteral("NetBSD"); #elif defined(Q_OS_OPENBSD) QString os = QStringLiteral("OpenBSD"); #elif defined(Q_OS_LINUX) QString os = QStringLiteral("Linux"); #elif defined(Q_OS_MAC) QString os = QStringLiteral("Mac OS"); #else QString os = QStringLiteral("Unknown"); #endif m_stats[QStringLiteral("current.os")] = os; QRect scr = QGuiApplication::primaryScreen()->geometry(); m_stats[QStringLiteral("current.screen")] = QString(SKGServices::intToString(scr.width()) % 'x' % SKGServices::intToString(scr.height())); #ifdef HAVE_UNAME struct utsname buf {}; if (uname(&buf) != -1) { m_stats[QStringLiteral("current.os.machine")] = QString::fromLocal8Bit(buf.machine); m_stats[QStringLiteral("current.os.version")] = QString::fromLocal8Bit(buf.version); } #endif // Nb calls QMap > actions = SKGMainPanel::getMainPanel()->getGlobalActions(); QStringList keys = actions.keys(); for (const auto& k : qAsConst(keys)) { QPointer act = actions[k]; if (act != nullptr) { QString id = "nb_call." % act->objectName(); if (!m_stats.contains(id)) { m_stats[id] = 0; } } } m_stats[QStringLiteral("document.uuid")] = docUUID; // Set tables sizes QStringList tables; m_currentDocument->getTablesList(tables); for (const auto& t : qAsConst(tables)) { QString r; m_currentDocument->executeSingleSelectSqliteOrder("SELECT COUNT(1) FROM " % t, r); m_stats["count." % t] = SKGServices::stringToInt(r); } } } } } void SKGStatisticPlugin::readStats() { m_stats.clear(); // Read file QFile data(m_file); if (data.open(QFile::ReadOnly)) { // Parse json m_stats = QJsonDocument::fromJson(data.readAll()).toVariant().toMap(); data.close(); } } void SKGStatisticPlugin::writeStats() { // Write it in file QFile data(m_file); if (data.open(QFile::WriteOnly | QFile::Truncate)) { // serialize json QJsonDocument serializer = QJsonDocument::fromVariant(m_stats); QByteArray doc = serializer.toJson(QJsonDocument::Indented); data.write(doc); data.close(); } } void SKGStatisticPlugin::triggerAction() { SKGTRACEINFUNC(10) auto* act = qobject_cast< QAction* >(sender()); if (act != nullptr) { QString id = "nb_call." % act->objectName(); SKGTRACEL(10) << "SKGStatisticPlugin::triggerAction " << id << "++" << endl; m_stats[id] = m_stats[id].toInt() + 1; } } void SKGStatisticPlugin::pageChanged() { SKGTabPage::SKGPageHistoryItem currentPage = SKGMainPanel::getMainPanel()->currentPageHistoryItem(); if (!currentPage.plugin.isEmpty()) { QString id = "nb_activated_" % QString(currentPage.bookmarkID.isEmpty() ? QStringLiteral("page") : QStringLiteral("bookmark")) % "." % currentPage.plugin; m_stats[id] = m_stats[id].toInt() + 1; } } void SKGStatisticPlugin::pageOpened() { SKGTabPage::SKGPageHistoryItem currentPage = SKGMainPanel::getMainPanel()->currentPageHistoryItem(); if (!currentPage.plugin.isEmpty()) { QString id = "nb_opened_" % QString(currentPage.bookmarkID.isEmpty() ? QStringLiteral("page") : QStringLiteral("bookmark")) % "." % currentPage.plugin; m_stats[id] = m_stats[id].toInt() + 1; } } QString SKGStatisticPlugin::title() const { return i18nc("The title", "Statistic"); } QString SKGStatisticPlugin::icon() const { return QStringLiteral("dialog-information"); } QString SKGStatisticPlugin::toolTip() const { return title(); } int SKGStatisticPlugin::getOrder() const { return 9999; } bool SKGStatisticPlugin::isInPagesChooser() const { return false; } #include diff --git a/plugins/skrooge/skrooge_bank/skgbankpluginwidget.cpp b/plugins/skrooge/skrooge_bank/skgbankpluginwidget.cpp index 279b2b181..6b6aca480 100644 --- a/plugins/skrooge/skrooge_bank/skgbankpluginwidget.cpp +++ b/plugins/skrooge/skrooge_bank/skgbankpluginwidget.cpp @@ -1,869 +1,869 @@ /*************************************************************************** * Copyright (C) 2020 by S. MANKOWSKI / G. DE BURE support@mankowski.fr * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see * ***************************************************************************/ /** @file * This file is Skrooge plugin for bank management. * * @author Stephane MANKOWSKI / Guillaume DE BURE */ #include "skgbankpluginwidget.h" #include #include #include #include #include #include #include #include "skgbankobject.h" #include "skgboardwidget.h" #include "skgdocumentbank.h" #include "skginterfaceplugin.h" #include "skgmainpanel.h" #include "skgobjectmodel.h" #include "skgtablewithgraph.h" #include "skgtraces.h" #include "skgtransactionmng.h" #include "skgunitobject.h" #include "skgunitvalueobject.h" SKGBankPluginWidget::SKGBankPluginWidget(QWidget* iParent, SKGDocumentBank* iDocument) : SKGTabPage(iParent, iDocument), m_graph(nullptr) { SKGTRACEINFUNC(10) if (iDocument == nullptr) { return; } ui.setupUi(this); // Add report SKGInterfacePlugin* reportPlugin = SKGMainPanel::getMainPanel()->getPluginByName(QStringLiteral("Skrooge report plugin")); if (reportPlugin != nullptr) { m_graph = reportPlugin->getDashboardWidget(0); if (m_graph != nullptr) { // To avoid hidden page when no account exist auto w = new QWidget(this); auto verticalLayout = new QVBoxLayout(w); verticalLayout->addWidget(m_graph); m_graph->hideTitle(); ui.verticalLayout->insertWidget(2, w); // Set initial state m_graph->hide(); QDomDocument doc(QStringLiteral("SKGML")); QDomElement root = doc.createElement(QStringLiteral("parameters")); doc.appendChild(root); { QDomDocument doc1(QStringLiteral("SKGML")); QDomElement root1 = doc1.createElement(QStringLiteral("parameters")); doc1.appendChild(root1); root1.setAttribute(QStringLiteral("period"), QStringLiteral("0")); root1.setAttribute(QStringLiteral("columns"), QStringLiteral("d_DATEMONTH")); root1.setAttribute(QStringLiteral("mode"), QStringLiteral("1")); root1.setAttribute(QStringLiteral("currentPage"), QStringLiteral("-2")); root1.setAttribute(QStringLiteral("operationWhereClause"), QStringLiteral("1=0")); root1.setAttribute(QStringLiteral("title"), QStringLiteral("none")); { QDomDocument doc2(QStringLiteral("SKGML")); QDomElement root2 = doc2.createElement(QStringLiteral("parameters")); doc2.appendChild(root2); root2.setAttribute(QStringLiteral("graphMode"), SKGServices::intToString(static_cast(SKGTableWithGraph::LINE))); { QDomDocument doc3(QStringLiteral("SKGML")); QDomElement root3 = doc3.createElement(QStringLiteral("parameters")); doc3.appendChild(root3); root3.setAttribute(QStringLiteral("isToolBarVisible"), QStringLiteral("N")); root2.setAttribute(QStringLiteral("graphicViewState"), doc3.toString()); } root1.setAttribute(QStringLiteral("tableAndGraphState"), doc2.toString()); } root.setAttribute(QStringLiteral("graph"), doc1.toString()); } m_graph->setState(doc.toString()); m_timer2.setSingleShot(true); connect(&m_timer2, &QTimer::timeout, this, &SKGBankPluginWidget::onRefreshGraph, Qt::QueuedConnection); onRefreshGraphDelayed(); connect(ui.kView->getShowWidget(), &SKGShow::stateChanged, this, &SKGBankPluginWidget::onRefreshGraphDelayed, Qt::QueuedConnection); } } // Set label titles ui.kBankLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_bank")))); ui.kAccountLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_ACCOUNT")))); ui.kTypeLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_type")))); ui.kBankNumberLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_bank_number")))); ui.kAgencyNumberLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_agency_number")))); ui.kNumberLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_number")))); ui.kAgencyAddressLbl->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_agency_address")))); ui.kMaxLimit->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("f_maxamount")))); ui.kMinLimit->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("f_minamount")))); ui.kCommentLabel->setText(i18n("%1:", iDocument->getDisplay(QStringLiteral("t_comment")))); // Set show widget ui.kView->getShowWidget()->addGroupedItem(QStringLiteral("all"), i18n("All"), QLatin1String(""), QLatin1String(""), QLatin1String(""), Qt::META + Qt::Key_A); ui.kView->getShowWidget()->addGroupedItem(QStringLiteral("opened"), i18n("Opened"), QStringLiteral("vcs-normal"), QStringLiteral("t_close='N'"), QLatin1String(""), Qt::META + Qt::Key_O); ui.kView->getShowWidget()->addGroupedItem(QStringLiteral("closed"), i18n("Closed"), QStringLiteral("vcs-conflicting"), QStringLiteral("t_close='Y'"), QLatin1String(""), Qt::META + Qt::Key_C); ui.kView->getShowWidget()->addGroupedItem(QStringLiteral("highlighted"), i18n("Highlighted only"), QStringLiteral("bookmarks"), QStringLiteral("t_bookmarked='Y'"), QLatin1String(""), Qt::META + Qt::Key_H); if (m_graph != nullptr) { ui.kView->getShowWidget()->addSeparator(); ui.kView->getShowWidget()->addItem(QStringLiteral("graph"), i18n("Graph"), QStringLiteral("view-statistics"), QStringLiteral("1=0"), QLatin1String(""), QLatin1String(""), QLatin1String(""), QLatin1String(""), Qt::META + Qt::Key_G); } ui.kView->getShowWidget()->setDefaultState(QStringLiteral("opened")); m_timer.setSingleShot(true); connect(&m_timer, &QTimer::timeout, this, &SKGBankPluginWidget::refreshInfoZone, Qt::QueuedConnection); // Add Standard KDE Icons to buttons to Accounts ui.kAccountCreatorUpdate->setIcon(SKGServices::fromTheme(QStringLiteral("dialog-ok"))); ui.kAccountCreatorAdd->setIcon(SKGServices::fromTheme(QStringLiteral("list-add"))); SKGWidgetSelector::SKGListQWidget list; list.push_back(ui.SKGEditionWidget); list.push_back(ui.SKGEditionButtonswidget); ui.kWidgetSelector->addButton(SKGServices::fromTheme(QStringLiteral("configure")), i18n("Edit"), i18n("Display the account edit panel"), list); // Add NLS values for type of account // C=current D=credit card P=passif (for objects) I=Investment O=other ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-checking")), i18nc("Noun, a type of account", "Current"), static_cast(SKGAccountObject::CURRENT)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("skrooge_credit_card")), i18nc("Noun, a type of account", "Credit card"), static_cast(SKGAccountObject::CREDITCARD)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-savings")), i18nc("Noun, a type of account", "Saving"), static_cast(SKGAccountObject::SAVING)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-savings")), i18nc("Noun, a type of account", "Investment"), static_cast(SKGAccountObject::INVESTMENT)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-savings")), i18nc("Noun, a type of account", "Assets"), static_cast(SKGAccountObject::ASSETS)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-savings")), i18nc("Noun, a type of account", "Loan"), static_cast(SKGAccountObject::LOAN)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("view-bank-account-savings")), i18nc("Noun, a type of account", "Pension"), static_cast(SKGAccountObject::PENSION)); ui.kAccountCreatorType->addItem(SKGServices::fromTheme(QStringLiteral("wallet-closed")), i18nc("Noun, a type of account", "Wallet"), static_cast(SKGAccountObject::WALLET)); ui.kAccountCreatorType->addItem(i18nc("Noun, a type of account", "Other"), static_cast(SKGAccountObject::OTHER)); // Bind account creation view ui.kView->setModel(new SKGObjectModel(qobject_cast(getDocument()), QStringLiteral("v_account_display"), QStringLiteral("1=0"), this, QLatin1String(""), false)); connect(ui.kView->getView(), &SKGTreeView::clickEmptyArea, this, &SKGBankPluginWidget::cleanEditor); connect(ui.kView->getView(), &SKGTreeView::doubleClicked, SKGMainPanel::getMainPanel()->getGlobalAction(QStringLiteral("open")).data(), &QAction::trigger); connect(ui.kView->getView(), &SKGTreeView::selectionChangedDelayed, this, [ = ] {this->onSelectionChanged();}); // Search file list - QString listIconFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "skrooge/images/logo/l10n/" % QLocale::countryToString(QLocale().country()) % "/list_bank.txt"); + QString listIconFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "skrooge/images/logo/l10n/" % QLocale().name().split("_").at(0) % "/list_bank.txt"); if (listIconFile.isEmpty()) { listIconFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/images/logo/list_bank.txt")); } // Logo for banks ui.kAccountCreatorIcon->addItem(QLatin1String("")); QFile file(listIconFile); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine().trimmed(); if (!line.isEmpty()) { QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "skrooge/images/logo/" % line); QString bankName = line; bankName.remove(QStringLiteral(".png")); bankName.replace('_', ' '); QRegExp rx(QStringLiteral("(.+) {2,}(.+)")); if (rx.indexIn(bankName) != -1) { // Icon is something like __.png ui.kAccountCreatorIcon->addItem(QIcon(fileName), rx.cap(1), rx.cap(2)); } else { ui.kAccountCreatorIcon->addItem(QIcon(fileName), bankName, ""); } } } ui.kAccountCreatorIcon->addItem(SKGServices::fromTheme(QStringLiteral("document-open-folder")), i18nc("Other type of bank account", "Other...")); file.close(); } // Set Event filters to catch CTRL+ENTER or SHIFT+ENTER this->installEventFilter(this); // Activate the edit panel per default ui.kWidgetSelector->setSelectedMode(0); // Connects connect(ui.kAccountCreatorAdd, &QPushButton::clicked, this, &SKGBankPluginWidget::onAddAccountClicked); connect(ui.kAccountCreatorUpdate, &QPushButton::clicked, this, &SKGBankPluginWidget::onModifyAccountClicked); connect(ui.kAccountCreatorAccount, &QLineEdit::textChanged, this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kUnitEdit, &SKGUnitComboBox::editTextChanged, this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kAccountCreatorType, static_cast(&SKGComboBox::currentIndexChanged), this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kWidgetSelector, &SKGWidgetSelector::selectedModeChanged, this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kAmountEdit, &SKGCalculatorEdit::textChanged, this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kAccountCreatorIcon, static_cast(&SKGComboBox::currentIndexChanged), this, &SKGBankPluginWidget::onIconChanged); connect(ui.kAccountCreatorBank, &SKGComboBox::editTextChanged, this, &SKGBankPluginWidget::onAccountCreatorModified); connect(ui.kMinLimit, &QCheckBox::toggled, ui.kMinLimitAmout, &SKGCalculatorEdit::setEnabled); connect(ui.kMaxLimit, &QCheckBox::toggled, ui.kMaxLimitAmout, &SKGCalculatorEdit::setEnabled); connect(ui.kUnitEdit, &SKGUnitComboBox::editTextChanged, ui.kMinLimitunit, &QLabel::setText); connect(ui.kUnitEdit, &SKGUnitComboBox::editTextChanged, ui.kMaxLimitunit, &QLabel::setText); // Must be done after the connects ui.kUnitEdit->setDocument(iDocument); // Refresh connect(getDocument(), &SKGDocument::tableModified, this, &SKGBankPluginWidget::dataModified, Qt::QueuedConnection); dataModified(QLatin1String(""), 0); } SKGBankPluginWidget::~SKGBankPluginWidget() { SKGTRACEINFUNC(10) } bool SKGBankPluginWidget::eventFilter(QObject* iObject, QEvent* iEvent) { if ((iEvent != nullptr) && iEvent->type() == QEvent::KeyPress) { auto* keyEvent = dynamic_cast(iEvent); if (keyEvent && (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) && iObject == this) { if ((QApplication::keyboardModifiers() & Qt::ControlModifier) != 0u && ui.kAccountCreatorAdd->isEnabled()) { ui.kAccountCreatorAdd->click(); } else if ((QApplication::keyboardModifiers() &Qt::ShiftModifier) != 0u && ui.kAccountCreatorUpdate->isEnabled()) { ui.kAccountCreatorUpdate->click(); } } } return SKGTabPage::eventFilter(iObject, iEvent); } void SKGBankPluginWidget::onSelectionChanged() { SKGTRACEINFUNC(10) // Mapping int nbSelect = ui.kView->getView()->getNbSelectedObjects(); if (nbSelect == 1) { // set the icon SKGAccountObject account(ui.kView->getView()->getFirstSelectedObject()); SKGBankObject bank; account.getBank(bank); QString fileName = bank.getIcon(); QString iconName = fileName; if (!iconName.isEmpty()) { iconName.remove(QStringLiteral(".png")); iconName.replace('_', ' '); QRegExp rx(QStringLiteral("(.+) {2,}(.+)")); if (rx.indexIn(iconName) != -1) { iconName = rx.cap(1); } if (ui.kAccountCreatorIcon->contains(iconName)) { ui.kAccountCreatorIcon->setText(iconName); } else if (ui.kAccountCreatorIcon->contains(fileName)) { ui.kAccountCreatorIcon->setText(fileName); } else { int c = ui.kAccountCreatorIcon->count() - 1; bool b = ui.kAccountCreatorIcon->blockSignals(true); ui.kAccountCreatorIcon->insertItem(c, QIcon(fileName), fileName); ui.kAccountCreatorIcon->setCurrentIndex(c); ui.kAccountCreatorIcon->blockSignals(b); } } else { ui.kAccountCreatorIcon->setText(QLatin1String("")); } ui.kAccountCreatorBank->setText(account.getAttribute(QStringLiteral("t_BANK"))); ui.kAccountCreatorAccount->setText(account.getAttribute(QStringLiteral("t_name"))); ui.kAccountCreatorBankNumber->setText(account.getAttribute(QStringLiteral("t_BANK_NUMBER"))); ui.kAccountCreatorAgencyNumber->setText(account.getAttribute(QStringLiteral("t_agency_number"))); ui.kAccountCreatorNumber->setText(account.getAttribute(QStringLiteral("t_number"))); ui.kAccountCreatorType->setText(account.getAttribute(QStringLiteral("t_TYPENLS"))); ui.kAccountCreatorAddress->setText(account.getAttribute(QStringLiteral("t_agency_address"))); ui.kAccountCreatorComment->setText(account.getAttribute(QStringLiteral("t_comment"))); ui.kMinLimitAmout->setText(account.getAttribute(QStringLiteral("f_minamount"))); ui.kMaxLimitAmout->setText(account.getAttribute(QStringLiteral("f_maxamount"))); ui.kMaxLimit->setTristate(false); ui.kMaxLimit->setCheckState(account.isMaxLimitAmountEnabled() ? Qt::Checked : Qt::Unchecked); ui.kMinLimit->setTristate(false); ui.kMinLimit->setCheckState(account.isMinLimitAmountEnabled() ? Qt::Checked : Qt::Unchecked); double oBalance = 0; SKGUnitObject oUnit; account.getInitialBalance(oBalance, oUnit); int nbDec = oUnit.getNumberDecimal(); if (nbDec == 0) { nbDec = 2; } ui.kAmountEdit->setText(SKGServices::toCurrencyString(oBalance, QLatin1String(""), nbDec)); if (oUnit.exist()) { ui.kUnitEdit->setUnit(oUnit); } else { auto* doc = qobject_cast(getDocument()); if (doc != nullptr) { SKGServices::SKGUnitInfo primary = doc->getPrimaryUnit(); ui.kUnitEdit->setText(primary.Symbol); } } } else if (nbSelect > 1) { ui.kAccountCreatorIcon->setText(NOUPDATE); ui.kAccountCreatorBank->setText(NOUPDATE); ui.kAccountCreatorAccount->setText(NOUPDATE); ui.kAccountCreatorBankNumber->setText(NOUPDATE); ui.kAccountCreatorAgencyNumber->setText(NOUPDATE); ui.kAccountCreatorNumber->setText(NOUPDATE); ui.kAccountCreatorType->setText(NOUPDATE); ui.kAccountCreatorAddress->setText(NOUPDATE); ui.kAccountCreatorComment->setText(NOUPDATE); ui.kAmountEdit->setText(NOUPDATE); ui.kUnitEdit->setText(NOUPDATE); ui.kMinLimitAmout->setText(NOUPDATE); ui.kMaxLimitAmout->setText(NOUPDATE); ui.kMaxLimit->setTristate(true); ui.kMaxLimit->setCheckState(Qt::PartiallyChecked); ui.kMinLimit->setTristate(true); ui.kMinLimit->setCheckState(Qt::PartiallyChecked); } // Refresh graph m_timer2.start(300); onAccountCreatorModified(); Q_EMIT selectionChanged(); } void SKGBankPluginWidget::onRefreshGraphDelayed() { m_timer2.start(300); } void SKGBankPluginWidget::onRefreshGraph() { SKGTRACEINFUNC(10) if (m_graph != nullptr) { bool visible = ui.kView->getShowWidget()->getState().contains(QStringLiteral("graph")); QDomDocument doc(QStringLiteral("SKGML")); if (doc.setContent(m_graph->getState())) { QDomElement root = doc.documentElement(); QString graphS = root.attribute(QStringLiteral("graph")); QDomDocument doc2(QStringLiteral("SKGML")); if (doc2.setContent(graphS)) { QDomElement root2 = doc2.documentElement(); QString wc; QString title; int nbSelect = 0; if (visible) { SKGObjectBase::SKGListSKGObjectBase objs = ui.kView->getView()->getSelectedObjects(); nbSelect = objs.count(); if (nbSelect != 0) { wc = QStringLiteral("t_ACCOUNT IN ("); title = i18nc("Noun, a list of items", "Operations of account "); for (int i = 0; i < nbSelect; ++i) { if (i != 0) { wc += ','; title += ','; } SKGAccountObject act(objs.at(i)); wc += '\'' % SKGServices::stringToSqlString(act.getName()) % '\''; title += i18n("'%1'", act.getName()); } wc += ')'; } } else { wc = QStringLiteral("1=0"); title = QStringLiteral("none"); } root2.setAttribute(QStringLiteral("operationWhereClause"), wc); root2.setAttribute(QStringLiteral("title"), title); root2.setAttribute(QStringLiteral("lines"), nbSelect != 0 ? QStringLiteral("t_ACCOUNT") : QStringLiteral("#NOTHING#")); } root.setAttribute(QStringLiteral("graph"), doc2.toString()); } QString newGraphState = doc.toString(); if (newGraphState != m_graphState) { m_graphState = newGraphState; m_graph->setState(m_graphState); } m_graph->setVisible(visible); } } void SKGBankPluginWidget::onIconChanged() { SKGTRACEINFUNC(10) int c = ui.kAccountCreatorIcon->currentIndex(); if ((c != 0) && c == ui.kAccountCreatorIcon->count() - 1) { QString fileName = QFileDialog::getOpenFileName(this, i18nc("Title of panel", "Select a bank icon"), QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/images/logo/"), QStandardPaths::LocateDirectory), i18nc("File format for open dialog panel", "Image files") % " (*.png *.jpeg *.jpg *.gif *.tiff)"); if (!fileName.isEmpty()) { if (ui.kAccountCreatorIcon->contains(fileName)) { ui.kAccountCreatorIcon->setText(fileName); } else { bool b = ui.kAccountCreatorIcon->blockSignals(true); ui.kAccountCreatorIcon->insertItem(c, QIcon(fileName), fileName); ui.kAccountCreatorIcon->setCurrentIndex(c); ui.kAccountCreatorIcon->blockSignals(b); } } else { ui.kAccountCreatorIcon->setCurrentIndex(c - 1); } } if (ui.kAccountCreatorIcon->currentIndex() != 0) { // Set the bank name QString name = ui.kAccountCreatorIcon->currentText(); QFileInfo f(name); if (f.exists()) { name = f.baseName(); name = name.replace('_', ' '); } ui.kAccountCreatorBank->setText(name); } else { ui.kAccountCreatorBank->setText(QLatin1String("")); } // Facilitate bank number QString code = ui.kAccountCreatorIcon->itemData(ui.kAccountCreatorIcon->currentIndex()).toString(); ui.kAccountCreatorBankNumber->setText(code); } void SKGBankPluginWidget::onAccountCreatorModified() { SKGTRACEINFUNC(10) bool activatedForWallet = ui.kWidgetSelector->getSelectedMode() != -1 && !ui.kAccountCreatorAccount->text().isEmpty() && !ui.kAccountCreatorAccount->text().startsWith(QLatin1Char('=')) && !ui.kUnitEdit->currentText().isEmpty() && (ui.kAmountEdit->valid() || ui.kAmountEdit->text().isEmpty() || ui.kAmountEdit->text() == NOUPDATE); bool activated = activatedForWallet && !ui.kAccountCreatorBank->text().isEmpty() && !ui.kAccountCreatorBank->text().startsWith(QLatin1Char('=')); bool wallet = (static_cast(ui.kAccountCreatorType->itemData(ui.kAccountCreatorType->currentIndex()).toInt()) == SKGAccountObject::WALLET); int nbSelect = getNbSelectedObjects(); ui.kAccountCreatorAdd->setEnabled(activated || (wallet && activatedForWallet)); ui.kAccountCreatorUpdate->setEnabled((activated || (wallet && activatedForWallet)) && nbSelect > 0); // Wallet specific mode ui.kBankNumberLbl->setVisible(!wallet); ui.kAccountCreatorBankNumber->setVisible(!wallet); ui.kAgencyNumberLbl->setVisible(!wallet); ui.kAccountCreatorAgencyNumber->setVisible(!wallet); ui.kNumberLbl->setVisible(!wallet); ui.kAccountCreatorNumber->setVisible(!wallet); ui.kBankLbl->setVisible(!wallet); ui.kAccountCreatorIcon->setVisible(!wallet); ui.kAccountCreatorBank->setVisible(!wallet); ui.kAccountCreatorAddress->setVisible(!wallet); ui.kAgencyAddressLbl->setVisible(!wallet); } SKGError SKGBankPluginWidget::setInitialBalanceFromEditor(SKGAccountObject& iAccount) { return (ui.kAmountEdit->text() != NOUPDATE && ui.kUnitEdit->text() != NOUPDATE ? iAccount.setInitialBalance(ui.kAmountEdit->value(), ui.kUnitEdit->getUnit()) : SKGError()); } void SKGBankPluginWidget::onAddAccountClicked() { SKGError err; SKGTRACEINFUNCRC(10, err) { SKGAccountObject accountObj; QString bankName = ui.kAccountCreatorBank->text(); QString accountName = ui.kAccountCreatorAccount->text(); QString name = bankName % '-' % accountName; SKGAccountObject::AccountType accountType = static_cast(ui.kAccountCreatorType->itemData(ui.kAccountCreatorType->currentIndex()).toInt()); if (accountType == SKGAccountObject::WALLET) { bankName = QLatin1String(""); } { SKGBEGINTRANSACTION(*getDocument(), i18nc("Creating an account", "Account creation '%1'", name), err) // Create bank object in case of missing SKGBankObject bankObj(getDocument()); IFOKDO(err, bankObj.setName(ui.kAccountCreatorBank->text())) IFOK(err) { // Build icon name QString icon = ui.kAccountCreatorIcon->currentText(); if (!QFile(icon).exists() && !icon.isEmpty()) { QString code = ui.kAccountCreatorIcon->itemData(ui.kAccountCreatorIcon->currentIndex()).toString(); if (!code.isEmpty()) { icon += " " % code; } icon.replace(' ', '_'); icon += QStringLiteral(".png"); } err = bankObj.setIcon(icon); } IFOKDO(err, bankObj.setNumber(ui.kAccountCreatorBankNumber->text())) IFOKDO(err, bankObj.save()) IFOKDO(err, bankObj.load()) // Create account object in case of missing IFOKDO(err, bankObj.addAccount(accountObj)) IFOKDO(err, accountObj.setName(accountName)) IFOKDO(err, accountObj.setAgencyNumber(ui.kAccountCreatorAgencyNumber->text())) IFOKDO(err, accountObj.setAgencyAddress(ui.kAccountCreatorAddress->text())) IFOKDO(err, accountObj.setComment(ui.kAccountCreatorComment->text())) IFOKDO(err, accountObj.setNumber(ui.kAccountCreatorNumber->text())) IFOKDO(err, accountObj.setType(accountType)) IFOKDO(err, accountObj.maxLimitAmountEnabled(ui.kMaxLimit->isChecked())) IFOKDO(err, accountObj.setMaxLimitAmount(ui.kMaxLimitAmout->value())) IFOKDO(err, accountObj.minLimitAmountEnabled(ui.kMinLimit->isChecked())) IFOKDO(err, accountObj.setMinLimitAmount(ui.kMinLimitAmout->value())) IFOKDO(err, accountObj.save(false)) IFOKDO(err, setInitialBalanceFromEditor(accountObj)) IFOKDO(err, accountObj.save()) // Send message IFOKDO(err, accountObj.getDocument()->sendMessage(i18nc("An information to the user that something was added", "The account '%1' has been added", accountObj.getDisplayName()), SKGDocument::Hidden)) } // status bar IFOK(err) { err = SKGError(0, i18nc("Successfully created an account", "Account '%1' created", name)); ui.kView->getView()->selectObject(accountObj.getUniqueID()); } else { err.addError(ERR_FAIL, i18nc("Error message : Could not create an account", "Account creation failed")); } } // Display error SKGMainPanel::displayErrorMessage(err, true); } void SKGBankPluginWidget::onModifyAccountClicked() { SKGError err; SKGTRACEINFUNCRC(10, err) { // Get Selection SKGObjectBase::SKGListSKGObjectBase selection = getSelectedObjects(); int nb = selection.count(); // Is it a massive modification of accounts to merge them ? SKGBEGINPROGRESSTRANSACTION(*getDocument(), i18nc("Updating an account", "Account update"), err, nb) auto name = ui.kAccountCreatorAccount->text(); if (name != NOUPDATE && !name.startsWith(QLatin1String("="))) { // Is this name already existing? bool messageSent = false; SKGAccountObject p(getDocument()); p.setName(name); IFOK(p.load()) { if (selection.indexOf(p) == -1) { // We will have to merge with the existing account selection.insert(0, p); nb++; getDocument()->sendMessage(i18nc("Information message", "You tried to modify names of selected accounts to an existing account. Accounts have been merged.")); messageSent = true; } } // Is it a massive modification of account to merge them ? if (nb > 1) { if (!messageSent) { getDocument()->sendMessage(i18nc("Information message", "You tried to modify all names of selected accounts. Accounts have been merged.")); } // Do the merge SKGAccountObject accountObj1(selection[0]); for (int i = 1; !err && i < nb; ++i) { SKGAccountObject accountObj(selection.at(i)); err = accountObj1.merge(accountObj, true); } // Change selection for the rest of the operation selection.clear(); selection.push_back(accountObj1); nb = 1; } } QString bankName = ui.kAccountCreatorBank->text(); SKGAccountObject::AccountType accountType = static_cast(ui.kAccountCreatorType->itemData(ui.kAccountCreatorType->currentIndex()).toInt()); if (accountType == SKGAccountObject::WALLET) { bankName = QLatin1String(""); } for (int i = 0; !err && i < nb; ++i) { SKGAccountObject accountObj(selection.at(i)); err = accountObj.setName(name); IFOKDO(err, accountObj.setNumber(ui.kAccountCreatorNumber->text())) IFOKDO(err, setInitialBalanceFromEditor(accountObj)) if (!err && ui.kAccountCreatorType->text() != NOUPDATE) { err = accountObj.setType(static_cast(ui.kAccountCreatorType->itemData(ui.kAccountCreatorType->currentIndex()).toInt())); } IFOKDO(err, accountObj.setAgencyNumber(ui.kAccountCreatorAgencyNumber->text())) IFOKDO(err, accountObj.setAgencyAddress(ui.kAccountCreatorAddress->text())) IFOKDO(err, accountObj.setComment(ui.kAccountCreatorComment->text())) if (!err && ui.kMaxLimit->checkState() != Qt::PartiallyChecked) { err = accountObj.maxLimitAmountEnabled(ui.kMaxLimit->isChecked()); } if (!err && ui.kMaxLimitAmout->text() != NOUPDATE) { err = accountObj.setMaxLimitAmount(ui.kMaxLimitAmout->value()); } if (!err && ui.kMinLimit->checkState() != Qt::PartiallyChecked) { err = accountObj.minLimitAmountEnabled(ui.kMinLimit->isChecked()); } if (!err && ui.kMaxLimitAmout->text() != NOUPDATE) { err = accountObj.setMinLimitAmount(ui.kMinLimitAmout->value()); } IFOKDO(err, accountObj.save()) // Send message IFOKDO(err, accountObj.getDocument()->sendMessage(i18nc("An information message", "The account '%1' has been updated", accountObj.getDisplayName()), SKGDocument::Hidden)) // Update bank SKGBankObject bankObj; if (bankName == NOUPDATE) { accountObj.getBank(bankObj); } else { if (SKGNamedObject::getObjectByName(getDocument(), QStringLiteral("bank"), bankName, bankObj).isSucceeded()) { // The created bank already exist ==> update parent bank IFOKDO(err, accountObj.setBank(bankObj)) IFOKDO(err, accountObj.save()) } else { // The bank does not exist int code = KMessageBox::Yes; SKGBankObject currentBank; err = accountObj.getBank(currentBank); IFOK(err) { SKGObjectBase::SKGListSKGObjectBase accounts; err = currentBank.getAccounts(accounts); if (!err && accounts.count() > 1) { QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); code = KMessageBox::questionYesNo(this, i18nc("Question", "You are trying to modify bank name of account named '%1'.\nDo you want to do this modification for all accounts of this bank ? ", accountObj.getName())); QApplication::restoreOverrideCursor(); } } IFOKDO(err, accountObj.getBank(bankObj)) if (code == KMessageBox::Yes) { // The bank does not exist ==> update this one IFOKDO(err, bankObj.setName(bankName)) } else { // The bank does not exist ==> create a new one IFOKDO(err, bankObj.resetID()) IFOKDO(err, bankObj.setName(bankName)) IFOKDO(err, bankObj.save()) IFOKDO(err, accountObj.setBank(bankObj)) IFOKDO(err, accountObj.save()) } } } if (ui.kAccountCreatorIcon->text() != NOUPDATE) { IFOK(err) { // Build icon name QString icon = ui.kAccountCreatorIcon->currentText(); if (!QFile(icon).exists() && !icon.isEmpty()) { QString code = ui.kAccountCreatorIcon->itemData(ui.kAccountCreatorIcon->currentIndex()).toString(); if (!code.isEmpty()) { icon += " " % code; } icon.replace(' ', '_'); icon += QStringLiteral(".png"); } err = bankObj.setIcon(icon); } } IFOKDO(err, bankObj.setNumber(ui.kAccountCreatorBankNumber->text())) IFOKDO(err, bankObj.save()) IFOKDO(err, getDocument()->stepForward(i + 1)) } // Remove bank without account IFOK(err) { err = getDocument()->executeSqliteOrder(QStringLiteral("DELETE FROM bank WHERE NOT EXISTS(SELECT 1 FROM account WHERE account.rd_bank_id = bank.id)")); } } // status bar IFOKDO(err, SKGError(0, i18nc("Successfully updated an account", "Account updated."))) else { err.addError(ERR_FAIL, i18nc("Error message : Could not update an account", "Update failed")); } // Display error SKGMainPanel::displayErrorMessage(err, true); // Set focus on table ui.kView->getView()->setFocus(); } void SKGBankPluginWidget::cleanEditor() { if (getNbSelectedObjects() == 0) { ui.kAccountCreatorIcon->setText(QLatin1String("")); ui.kAccountCreatorBank->setText(QLatin1String("")); ui.kAccountCreatorAccount->setText(QLatin1String("")); ui.kAccountCreatorBankNumber->setText(QLatin1String("")); ui.kAccountCreatorAgencyNumber->setText(QLatin1String("")); ui.kAccountCreatorNumber->setText(QLatin1String("")); ui.kAccountCreatorType->setText(i18nc("Noun, a type of account", "Current")); ui.kAccountCreatorAddress->setText(QLatin1String("")); ui.kAccountCreatorComment->setText(QLatin1String("")); ui.kAmountEdit->setText(QStringLiteral("0")); ui.kUnitEdit->refershList(); } } QString SKGBankPluginWidget::getState() { SKGTRACEINFUNC(10) QDomDocument doc(QStringLiteral("SKGML")); QDomElement root = doc.createElement(QStringLiteral("parameters")); doc.appendChild(root); root.setAttribute(QStringLiteral("currentPage"), SKGServices::intToString(ui.kWidgetSelector->getSelectedMode())); root.setAttribute(QStringLiteral("view"), ui.kView->getState()); root.setAttribute(QStringLiteral("graph"), m_graph->getState()); return doc.toString(); } void SKGBankPluginWidget::setState(const QString& iState) { SKGTRACEINFUNC(10) QDomDocument doc(QStringLiteral("SKGML")); doc.setContent(iState); QDomElement root = doc.documentElement(); QString currentPage = root.attribute(QStringLiteral("currentPage")); if (currentPage.isEmpty()) { currentPage = '0'; } ui.kWidgetSelector->setSelectedMode(SKGServices::stringToInt(currentPage)); ui.kView->setState(root.attribute(QStringLiteral("view"))); m_graph->setState(root.attribute(QStringLiteral("graph"))); onRefreshGraph(); } QString SKGBankPluginWidget::getDefaultStateAttribute() { return QStringLiteral("SKGBANK_DEFAULT_PARAMETERS"); } void SKGBankPluginWidget::dataModified(const QString& iTableName, int iIdTransaction, bool iLightTransaction) { SKGTRACEINFUNC(10) Q_UNUSED(iIdTransaction) // Refresh widgets if (iTableName == QStringLiteral("v_account_display") || iTableName.isEmpty()) { // Refresh info area m_timer.start(300); } if (!iLightTransaction) { if (iTableName == QStringLiteral("bank") || iTableName.isEmpty()) { // Set completions SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorBank, getDocument(), QStringLiteral("bank"), QStringLiteral("t_name"), QLatin1String(""), true); } if (iTableName == QStringLiteral("account") || iTableName.isEmpty()) { // Set completions SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorAccount, getDocument(), QStringLiteral("account"), QStringLiteral("t_name"), QLatin1String(""), true); SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorBankNumber, getDocument(), QStringLiteral("bank"), QStringLiteral("t_bank_number"), QLatin1String(""), true); SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorAgencyNumber, getDocument(), QStringLiteral("account"), QStringLiteral("t_agency_number"), QLatin1String(""), true); SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorNumber, getDocument(), QStringLiteral("account"), QStringLiteral("t_number"), QLatin1String(""), true); SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorAddress, getDocument(), QStringLiteral("account"), QStringLiteral("t_agency_address"), QLatin1String(""), true); SKGMainPanel::fillWithDistinctValue(QList() << ui.kAccountCreatorComment, getDocument(), QStringLiteral("account"), QStringLiteral("t_comment"), QLatin1String(""), true); } } } void SKGBankPluginWidget::refreshInfoZone() { SKGTRACEINFUNC(10) auto* doc = qobject_cast(getDocument()); if (doc != nullptr) { ui.kInfo->setText(i18nc("Message", "Computing...")); doc->concurrentExecuteSelectSqliteOrder(QStringLiteral("SELECT TOTAL(f_TODAYAMOUNT), TOTAL(f_CURRENTAMOUNT), TOTAL(f_CHECKED), TOTAL(f_COMING_SOON) from v_account_display"), [ = ](const SKGStringListList & iResult) { if (iResult.count() == 2 && SKGMainPanel::getMainPanel()->pageIndex(this) != -1) { SKGServices::SKGUnitInfo primary = doc->getPrimaryUnit(); double v1 = SKGServices::stringToDouble(iResult.at(1).at(0)); double v2 = SKGServices::stringToDouble(iResult.at(1).at(1)); double v3 = SKGServices::stringToDouble(iResult.at(1).at(2)); double v4 = SKGServices::stringToDouble(iResult.at(1).at(3)); QString s1 = doc->formatMoney(v1, primary); QString s2 = doc->formatMoney(v2, primary); QString s3 = doc->formatMoney(v3, primary); QString s4 = doc->formatMoney(v4, primary); ui.kInfo->setText(i18nc("Information on an account's status : Balance is the current amount of money on the account, Checked is the amount of money on your last bank's statement, To be Checked is the differences between these two values", "Today balance : %1 Balance : %2 Checked : %3 To be Checked : %4", s1, s2, s3, s4)); SKGServices::SKGUnitInfo secondaryUnit = doc->getSecondaryUnit(); if (!secondaryUnit.Symbol.isEmpty() && (secondaryUnit.Value != 0.0)) { s1 = doc->formatMoney(v1, secondaryUnit); s2 = doc->formatMoney(v2, secondaryUnit); s3 = doc->formatMoney(v3, secondaryUnit); s4 = doc->formatMoney(v4, secondaryUnit); } ui.kInfo->setToolTip(i18nc("Information on an account's status : Balance is the current amount of money on the account, Checked is the amount of money on your last bank's statement, To be Checked is the differences between these two values", "

Today balance : %1 < / p >

Balance : %2 < / p >

Checked : %3 < / p >

To be Checked : %4 < / p > ", s1, s2, s3, s4)); } }); } } QWidget* SKGBankPluginWidget::mainWidget() { return ui.kView->getView(); } QList< QWidget* > SKGBankPluginWidget::printableWidgets() { QList< QWidget* > output; output.push_back(mainWidget()); if ((m_graph != nullptr) && m_graph->isVisible()) { output.push_back(m_graph); } return output; } void SKGBankPluginWidget::activateEditor() { if (ui.kWidgetSelector->getSelectedMode() == -1) { ui.kWidgetSelector->setSelectedMode(0); } ui.kAccountCreatorBank->setFocus(); } bool SKGBankPluginWidget::isEditor() { return true; } diff --git a/plugins/skrooge/skrooge_categories/skgcategoriesplugin.cpp b/plugins/skrooge/skrooge_categories/skgcategoriesplugin.cpp index 5c60d6da1..9a19cd668 100644 --- a/plugins/skrooge/skrooge_categories/skgcategoriesplugin.cpp +++ b/plugins/skrooge/skrooge_categories/skgcategoriesplugin.cpp @@ -1,460 +1,460 @@ /*************************************************************************** * Copyright (C) 2020 by S. MANKOWSKI / G. DE BURE support@mankowski.fr * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see * ***************************************************************************/ /** @file * This file is Skrooge plugin to generate categories. * * @author Stephane MANKOWSKI / Guillaume DE BURE */ #include "skgcategoriesplugin.h" #include #include #include #include #include #include #include #include #include "skgcategoriespluginwidget.h" #include "skgcategoryobject.h" #include "skgdocumentbank.h" #include "skghtmlboardwidget.h" #include "skgimportexportmanager.h" #include "skgmainpanel.h" #include "skgtraces.h" #include "skgtransactionmng.h" /** * This plugin factory. */ K_PLUGIN_FACTORY(SKGCategoriesPluginFactory, registerPlugin();) SKGCategoriesPlugin::SKGCategoriesPlugin(QWidget* iWidget, QObject* iParent, const QVariantList& /*iArg*/) : SKGInterfacePlugin(iParent), m_currentBankDocument(nullptr) { Q_UNUSED(iWidget) SKGTRACEINFUNC(10) } SKGCategoriesPlugin::~SKGCategoriesPlugin() { SKGTRACEINFUNC(10) m_currentBankDocument = nullptr; } bool SKGCategoriesPlugin::setupActions(SKGDocument* iDocument) { SKGTRACEINFUNC(10) m_currentBankDocument = qobject_cast(iDocument); if (m_currentBankDocument == nullptr) { return false; } setComponentName(QStringLiteral("skrooge_categories"), title()); setXMLFile(QStringLiteral("skrooge_categories.rc")); // Import categories QStringList overlaycategories; overlaycategories.push_back(icon()); QStringList overlaydelete; overlaydelete.push_back(QStringLiteral("edit-delete")); auto contextMenu = new KSelectAction(SKGServices::fromTheme(QStringLiteral("document-import"), overlaycategories), i18nc("Verb", "Import categories"), this); registerGlobalAction(QStringLiteral("import_categories"), contextMenu); QAction* actImportStdCat = contextMenu->addAction(SKGServices::fromTheme(QStringLiteral("document-import"), overlaycategories), i18nc("Verb", "Import standard categories")); actImportStdCat->setCheckable(false); connect(actImportStdCat, &QAction::triggered, this, &SKGCategoriesPlugin::importStandardCategories); registerGlobalAction(QStringLiteral("import_standard_categories"), actImportStdCat); - const auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "skrooge/categories/" % QLocale::countryToString(QLocale().country()), QStandardPaths::LocateDirectory); + const auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "skrooge/categories/" % QLocale().name().split("_").at(0), QStandardPaths::LocateDirectory); for (const auto& dir : dirs) { QDirIterator it(dir, QStringList() << QStringLiteral("*.qif")); while (it.hasNext()) { QString cat = it.next(); QString name = QFileInfo(cat).baseName().replace('_', ' '); QAction* act = contextMenu->addAction(SKGServices::fromTheme(QStringLiteral("document-import"), overlaycategories), i18nc("Verb", "Import categories [%1]", name)); act->setCheckable(false); act->setData(cat); connect(act, &QAction::triggered, this, &SKGCategoriesPlugin::importCategories); registerGlobalAction("import_categories_" % name, act); } } auto deleteUnusedCategoriesAction = new QAction(SKGServices::fromTheme(icon(), overlaydelete), i18nc("Verb", "Delete unused categories"), this); connect(deleteUnusedCategoriesAction, &QAction::triggered, this, &SKGCategoriesPlugin::deleteUnusedCategories); registerGlobalAction(QStringLiteral("clean_delete_unused_categories"), deleteUnusedCategoriesAction); // ------------ auto actTmp = new QAction(SKGServices::fromTheme(icon()), i18nc("Verb", "Open similar categories..."), this); actTmp->setData(QString("skg://skrooge_categories_plugin/?title_icon=" % icon() % "&title=" % SKGServices::encodeForUrl(i18nc("Noun, a list of items", "Similar categories")) % "&whereClause=" % SKGServices::encodeForUrl(QStringLiteral("id IN (SELECT category.id FROM category, (" "SELECT * FROM category C WHERE EXISTS (SELECT 1 FROM category p2 WHERE p2.id<>C.id AND upper(p2.t_fullname)=upper(C.t_fullname) AND p2.t_fullname<>C.t_fullname)) " "AS C WHERE category.t_fullname=C.t_fullname OR C.t_fullname LIKE category.t_fullname||' > %')")))); connect(actTmp, &QAction::triggered, SKGMainPanel::getMainPanel(), [ = ]() { SKGMainPanel::getMainPanel()->SKGMainPanel::openPage(); }); registerGlobalAction(QStringLiteral("view_open_similar_categories"), actTmp); /*TODO WITH RECURSIVE cat(t_fullname,id, level) AS ( SELECT t_fullname, id, 0 FROM v_category_display WHERE EXISTS (SELECT 1 FROM category p2 WHERE p2.id<>v_category_display.id AND upper(p2.t_fullname)=upper(v_category_display.t_fullname) AND p2.t_fullname<>v_category_display.t_fullname) UNION ALL SELECT v_category_display.t_name, v_category_display.id, cat.level+1 FROM v_category_display JOIN cat ON v_category_display.rd_category_id=cat.id ORDER BY 2 ) SELECT substr('..........',1,level*3) || t_fullname FROM cat; */ return true; } int SKGCategoriesPlugin::getNbDashboardWidgets() { SKGTRACEINFUNC(1) return 4; } QString SKGCategoriesPlugin::getDashboardWidgetTitle(int iIndex) { SKGTRACEINFUNC(1) if (iIndex == 0) { return i18nc("Report header", "5 main categories of expenditure"); } if (iIndex == 1) { return i18nc("Report header", "5 main variations"); } if (iIndex == 2) { return i18nc("Report header", "Budget"); } return i18nc("Report header", "5 main variations (issues)"); } SKGBoardWidget* SKGCategoriesPlugin::getDashboardWidget(int iIndex) { SKGTRACEINFUNC(1) // Get QML mode for dashboard KConfigSkeleton* skl = SKGMainPanel::getMainPanel()->getPluginByName(QStringLiteral("Dashboard plugin"))->getPreferenceSkeleton(); KConfigSkeletonItem* sklItem = skl->findItem(QStringLiteral("qmlmode")); bool qml = sklItem->property().toBool(); if (iIndex == 0) { return new SKGHtmlBoardWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument, getDashboardWidgetTitle(iIndex), QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/html/default/categories_period_table.") % (qml ? QStringLiteral("qml") : QStringLiteral("html"))), QStringList() << QStringLiteral("v_suboperation_consolidated"), SKGSimplePeriodEdit::ALL_PERIODS); } if (iIndex == 1) { return new SKGHtmlBoardWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument, getDashboardWidgetTitle(iIndex) % " - %1", QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/html/default/categories_variations.") % (qml ? QStringLiteral("qml") : QStringLiteral("html"))), QStringList() << QStringLiteral("v_suboperation_consolidated"), SKGSimplePeriodEdit::PREVIOUS_AND_CURRENT_PERIODS); } if (iIndex == 2) { return new SKGHtmlBoardWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument, getDashboardWidgetTitle(iIndex) % " - %1", QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/html/default/budget_table.") % (qml ? QStringLiteral("qml") : QStringLiteral("html"))), QStringList() << QStringLiteral("v_budget"), SKGSimplePeriodEdit::PREVIOUS_AND_CURRENT_MONTHS); } return new SKGHtmlBoardWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument, getDashboardWidgetTitle(iIndex) % " - %1", QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("skrooge/html/default/categories_variations_issues.") % (qml ? QStringLiteral("qml") : QStringLiteral("html"))), QStringList() << QStringLiteral("v_suboperation_consolidated"), SKGSimplePeriodEdit::PREVIOUS_AND_CURRENT_PERIODS); } void SKGCategoriesPlugin::refresh() { SKGTRACEINFUNC(10) if (m_currentBankDocument != nullptr) { // Automatic categories creation if (m_currentBankDocument->getMainDatabase() != nullptr) { QString doc_id = m_currentBankDocument->getUniqueIdentifier(); if (m_docUniqueIdentifier != doc_id) { m_docUniqueIdentifier = doc_id; bool exist = false; SKGError err = m_currentBankDocument->existObjects(QStringLiteral("category"), QString(), exist); if (!err && !exist) { importStandardCategories(); // The file is considered has not modified m_currentBankDocument->setFileNotModified(); } } } } } void SKGCategoriesPlugin::importCategories() { SKGTRACEINFUNC(10) SKGError err; auto* act = qobject_cast< QAction* >(sender()); if (act != nullptr) { QString fileName = act->data().toString(); QString name = QFileInfo(fileName).baseName().replace('_', ' '); { SKGBEGINTRANSACTION(*m_currentBankDocument, i18nc("Verb", "Import categories [%1]", name), err) SKGImportExportManager imp(m_currentBankDocument, QUrl(fileName)); err = imp.importFile(); IFOKDO(err, m_currentBankDocument->removeMessages(m_currentBankDocument->getCurrentTransaction())) } // status IFOKDO(err, SKGError(0, i18nc("Successful message after an user action", "Categories imported."))) else { err.addError(ERR_FAIL, i18nc("Error message", "Importing categories failed.")); } // Display error SKGMainPanel::displayErrorMessage(err); } } void SKGCategoriesPlugin::importStandardCategories() { SKGTRACEINFUNC(10) SKGError err; { QString cats = i18nc("List of categories. It is not needed to translate each item. You can set the list you want. ';' must be used to separate categories. ' > ' must be used to separate category and sub category (no limit of level).", "Alimony;Auto;Auto > Fuel;Auto > Insurance;Auto > Lease;Auto > Loan;Auto > Registration;Auto > Service;Bank Charges;Bank Charges > Interest Paid;Bank Charges > Service Charge;Bills;Bills > Electricity;" "Bills > Fuel Oil;Bills > Local Taxes;Bills > Mortgage;Bills > Natural Gas;Bills > Rent;Bills > TV;Bills > Telephone;Bills > Water & Sewage;Bonus;Business;Business > Auto;Business > Capital Goods;Business > Legal Expenses;Business > Office Rent;" "Business > Office Supplies;Business > Other;Business > Revenue;Business > Taxes;Business > Travel;Business > Utilities;Business > Wages & Salary;Car;Car > Fuel;Car > Insurance;Car > Lease;Car > Loan;Car > Registration;Car > Service;" "Cash Withdrawal;Charity;Charity > Donations;Child Care;Child Support;Clothing;Disability;Div Income;Div Income > Ord dividend;Div Income > Stock dividend;Education;Education > Board;Education > Books;Education > Fees;Education > Loans;" "Education > Tuition;Employment;Employment > Benefits;Employment > Foreign;Employment > Lump sums;Employment > Other employ;Employment > Salary & wages;Food;Food > Dining Out;Food > Groceries;Gardening;" "Gift Received;Gifts;Healthcare;Healthcare > Dental;Healthcare > Doctor;Healthcare > Hospital;Healthcare > Optician;Healthcare > Prescriptions;Holidays;Holidays > Accomodation;Holidays > Travel;Household;" "Household > Furnishings;Household > Repairs;Insurance;Insurance > Auto;Insurance > Disability;Insurance > Home and Contents;Insurance > Life;Insurance > Medical;Int Inc;Int Inc > Bank Interest;Int Inc > Gross;Int Inc > Net;" "Int Inc > Other savings;Invest. income;Invest. income > 1st option;Invest. income > Dividend;Invest. income > Foreign;Invest. income > Other savings;Invest. income > Other trusts;Invest. income > Other trusts#Capital;" "Invest. income > Other trusts#Dist. rec'd;Invest. income > Other trusts#Estate;Investment Income;Investment Income > Dividends;Investment Income > Interest;Investment Income > Long-Term Capital Gains;" "Investment Income > Short-Term Capital Gains;Investment Income > Tax-Exempt Interest;Job Expense;Job Expense > Non-Reimbursed;Job Expense > Reimbursed;Legal Fees;Leisure;Leisure > Books & Magazines;Leisure > Entertaining;" "Leisure > Films & Video Rentals;Leisure > Hobbies;Leisure > Sporting Events;Leisure > Sports Goods;Leisure > Tapes & CDs;Leisure > Theatre & Concerts etc;Leisure > Toys & Games;Loan;Loan > Loan Interest;Long-Term Capital gains;Mortgage;Mortgage > Interest;Mortgage > PMI;Mortgage > Principle;Motor;Motor > Fuel;Motor > Loan;Motor > Service;Other Expense;Other Expense > Unknown;Other Income;Other Income > Child Support;" "Other Income > Employee Share Option;Other Income > Gifts Received;Other Income > Loan Principal Received;Other Income > Lottery or Premium Bond Prizes;Other Income > Student loan;Other Income > Tax Refund;" "Other Income > Unemployment Benefit;Pension;Pension > Employer;Personal Care;Pet Care;Pet Care > Food;Pet Care > Supplies;Pet Care > Vet's Bills;Recreation;Retirement Accounts;Retirement Accounts > 401(k)403(b) Plan Contributions;" "Retirement Accounts > 529 Plan Contributions;Retirement Accounts > IRA Contributions;Retirement Income;Retirement Income > 401(k);Retirement Income > 401(k) > 403(b) Distributions;Retirement Income > IRA Distributions;" "Retirement Income > Pensions & Annuities;Retirement Income > State Pension Benefits;Short-Term Capital gains;Social Security Benefits;Taxes;Taxes > AMT;Taxes > Federal Tax;Taxes > Federal Taxes;Taxes > Local Tax;Taxes > Local Taxes;" "Taxes > Other Invest;Taxes > Other Tax;Taxes > Property Taxes;Taxes > Social Security;Taxes > State Tax;Taxes > State Taxes;Travel;Travel > Accomodations;Travel > Car Rental;Travel > Fares;Utilities;Utilities > Electricity;" "Utilities > Garbage & Recycling;Utilities > Gas;Utilities > Sewer;Utilities > Telephone;Utilities > Water;Wages & Salary;Wages & Salary > Benefits;Wages & Salary > Bonus;Wages & Salary > Commission;" "Wages & Salary > Employer Pension Contributions;Wages & Salary > Gross Pay;Wages & Salary > Net Pay;Wages & Salary > Overtime;Wages & Salary > Workman's Comp"); SKGBEGINTRANSACTION(*m_currentBankDocument, i18nc("Noun, name of the user action", "Import standard categories"), err) const auto items = SKGServices::splitCSVLine(cats, ';'); for (const auto& item : items) { QString line = item.trimmed(); if (!line.isEmpty()) { SKGCategoryObject cat; err = SKGCategoryObject::createPathCategory(m_currentBankDocument, line, cat); } } } // status IFOKDO(err, SKGError(0, i18nc("Successful message after an user action", "Categories imported."))) else { err.addError(ERR_FAIL, i18nc("Error message", "Importing categories failed.")); } // Display error SKGMainPanel::displayErrorMessage(err); } SKGTabPage* SKGCategoriesPlugin::getWidget() { SKGTRACEINFUNC(10) return new SKGCategoriesPluginWidget(SKGMainPanel::getMainPanel(), m_currentBankDocument); } QString SKGCategoriesPlugin::title() const { return i18nc("Noun, categories of items", "Categories"); } QString SKGCategoriesPlugin::icon() const { return QStringLiteral("view-categories"); } QString SKGCategoriesPlugin::toolTip() const { return i18nc("A tool tip", "Categories management"); } QStringList SKGCategoriesPlugin::tips() const { QStringList output; output.push_back(i18nc("Description of a tips", "

... categories can be reorganized by drag & drop.

")); output.push_back(i18nc("Description of a tips", "

... if you delete a category, all operations affected by this category will be associated to its parent category.

")); return output; } int SKGCategoriesPlugin::getOrder() const { return 30; } bool SKGCategoriesPlugin::isInPagesChooser() const { return true; } SKGAdviceList SKGCategoriesPlugin::advice(const QStringList& iIgnoredAdvice) { SKGTRACEINFUNC(10) SKGAdviceList output; // Check unused categories if (!iIgnoredAdvice.contains(QStringLiteral("skgcategoriesplugin_unused"))) { bool exist = false; m_currentBankDocument->existObjects(QStringLiteral("v_category_used2"), QStringLiteral("t_ISUSEDCASCADE='N'"), exist); if (exist) { SKGAdvice ad; ad.setUUID(QStringLiteral("skgcategoriesplugin_unused")); ad.setPriority(5); ad.setShortMessage(i18nc("Advice on making the best (short)", "Many unused categories")); ad.setLongMessage(i18nc("Advice on making the best (long)", "You can improve performances by removing categories that have no operations.")); SKGAdvice::SKGAdviceActionList autoCorrections; { SKGAdvice::SKGAdviceAction a; a.Title = QStringLiteral("skg://clean_delete_unused_categories"); a.IsRecommended = true; autoCorrections.push_back(a); } ad.setAutoCorrections(autoCorrections); output.push_back(ad); } } // Check operations not validated if (!iIgnoredAdvice.contains(QStringLiteral("skgmonthlyplugin_maincategoriesvariation"))) { QString month = QDate::currentDate().toString(QStringLiteral("yyyy-MM")); QDate datepreviousmonth = QDate::currentDate().addDays(-QDate::currentDate().day()); QString previousmonth = datepreviousmonth.toString(QStringLiteral("yyyy-MM")); QStringList listCategories; QStringList listVariations = m_currentBankDocument->get5MainCategoriesVariationList(month, previousmonth, true, &listCategories); int nb = listVariations.count(); SKGAdvice::SKGAdviceActionList autoCorrections; for (int i = 0; i < nb; ++i) { SKGAdvice ad; ad.setUUID("skgmonthlyplugin_maincategoriesvariation|" % listCategories.at(i)); ad.setPriority(7); ad.setShortMessage(i18nc("Advice on making the best (short)", "Important variation for '%1'", listCategories.at(i))); ad.setLongMessage(listVariations.at(i)); autoCorrections.resize(0); { SKGAdvice::SKGAdviceAction a; a.Title = i18nc("Advice on making the best (action)", "Open sub operations with category containing '%1'", listCategories.at(i)); a.IconName = QStringLiteral("quickopen"); a.IsRecommended = false; autoCorrections.push_back(a); } ad.setAutoCorrections(autoCorrections); output.push_back(ad); } } // Check categories with different case if (!iIgnoredAdvice.contains(QStringLiteral("skgcategoriesplugin_case"))) { bool exist = false; m_currentBankDocument->existObjects(QStringLiteral("category"), QStringLiteral("EXISTS (SELECT 1 FROM category p2 WHERE p2.id<>category.id AND upper(p2.t_fullname)=upper(category.t_fullname) AND p2.t_fullname<>category.t_fullname)"), exist); if (exist) { SKGAdvice ad; ad.setUUID(QStringLiteral("skgcategoriesplugin_case")); ad.setPriority(3); ad.setShortMessage(i18nc("Advice on making the best (short)", "Some categories seem to be identical")); ad.setLongMessage(i18nc("Advice on making the best (long)", "Some categories seem to be identical but with different syntax. They could be merged.")); SKGAdvice::SKGAdviceActionList autoCorrections; { SKGAdvice::SKGAdviceAction a; a.Title = QStringLiteral("skg://view_open_similar_categories"); a.IsRecommended = false; autoCorrections.push_back(a); } ad.setAutoCorrections(autoCorrections); output.push_back(ad); } } return output; } SKGError SKGCategoriesPlugin::executeAdviceCorrection(const QString& iAdviceIdentifier, int iSolution) { if ((m_currentBankDocument != nullptr) && iAdviceIdentifier.startsWith(QLatin1String("skgmonthlyplugin_maincategoriesvariation|"))) { // Get parameters QString category = iAdviceIdentifier.right(iAdviceIdentifier.length() - 41); QString month = QDate::currentDate().toString(QStringLiteral("yyyy-MM")); // Call operation plugin SKGMainPanel::getMainPanel()->openPage("skg://skrooge_operation_plugin/SKGOPERATION_CONSOLIDATED_DEFAULT_PARAMETERS/?currentPage=-1&title_icon=" % icon() % "&operationTable=v_suboperation_consolidated&title=" % SKGServices::encodeForUrl(i18nc("Noun, a list of items", "Sub operations with category containing '%1'", category)) % "&operationWhereClause=" % SKGServices::encodeForUrl("d_DATEMONTH='" % month % "' AND t_REALCATEGORY='" % SKGServices::stringToSqlString(category) % '\'')); return SKGError(); } return SKGInterfacePlugin::executeAdviceCorrection(iAdviceIdentifier, iSolution); } void SKGCategoriesPlugin::deleteUnusedCategories() const { SKGError err; _SKGTRACEINFUNCRC(10, err) if (m_currentBankDocument != nullptr) { SKGBEGINTRANSACTION(*m_currentBankDocument, i18nc("Noun, name of the user action", "Delete unused categories"), err) QStringList categoriesUsed; err = m_currentBankDocument->getDistinctValues(QStringLiteral("category"), QStringLiteral("t_fullname"), QStringLiteral("t_fullname in (" "SELECT DISTINCT(category.t_fullname) FROM category, suboperation WHERE suboperation.r_category_id=category.id UNION ALL " "SELECT DISTINCT(category.t_fullname) FROM category, budget WHERE budget.rc_category_id=category.id UNION ALL " "SELECT DISTINCT(category.t_fullname) FROM category, budgetrule WHERE budgetrule.rc_category_id=category.id UNION ALL " "SELECT DISTINCT(category.t_fullname) FROM category, budgetrule WHERE budgetrule.rc_category_id_target=category.id)"), categoriesUsed); for (int i = 0; i < categoriesUsed.count(); ++i) { // Warning categoriesUsed is modified in the loop QString cat = categoriesUsed.at(i); categoriesUsed[i] = SKGServices::stringToSqlString(cat); int pos = cat.lastIndexOf(OBJECTSEPARATOR); if (pos != -1) { categoriesUsed.push_back(cat.left(pos)); } } IFOK(err) { QString sql; if (!categoriesUsed.isEmpty()) { sql = "DELETE FROM category WHERE t_fullname NOT IN ('" % categoriesUsed.join(QStringLiteral("','")) % "')"; } else { sql = QStringLiteral("DELETE FROM category"); } err = m_currentBankDocument->executeSqliteOrder(sql); } } // status bar IFOKDO(err, SKGError(0, i18nc("Successful message after an user action", "Unused categories deleted"))) else { err.addError(ERR_FAIL, i18nc("Error message", "Unused categories deletion failed")); } // Display error SKGMainPanel::displayErrorMessage(err); } #include