/*************************************************************************** kmymoneyutils.h - description ------------------- begin : Wed Feb 5 2003 copyright : (C) 2000-2003 by Michael Edwardes email : mte@users.sourceforge.net Javier Campos Morales <javi_c@users.sourceforge.net> Felix Rodriguez <frodriguez@users.sourceforge.net> John C <thetacoturtle@users.sourceforge.net> Thomas Baumgart <ipwizard@users.sourceforge.net> Kevin Tambascio <ktambascio@users.sourceforge.net> ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef KMYMONEYUTILS_H #define KMYMONEYUTILS_H // ---------------------------------------------------------------------------- // QT Includes #include <tqcolor.h> #include <tqfont.h> // ---------------------------------------------------------------------------- // KDE Headers #include <kguiitem.h> // ---------------------------------------------------------------------------- // Project Includes #include <kmymoney/mymoneyaccount.h> #include <kmymoney/mymoneysecurity.h> #include <kmymoney/mymoneyscheduled.h> #include <kmymoney/mymoneytransaction.h> /** * @author Thomas Baumgart */ class KMyMoneyUtils { public: /** * This enum is used to describe the bits of an account type filter mask. * Each bit is used to define a specific account class. Multiple classes * can be specified by OR'ing multiple entries. The special entry @p last * marks the left most bit in the mask and is used by scanners of this * bitmask to determine the end of processing. */ enum categoryTypeE { none = 0x00, ///< no account class selected liability = 0x01, ///< liability accounts selected asset = 0x02, ///< asset accounts selected expense = 0x04, ///< expense accounts selected income = 0x08, ///< income accounts selected equity = 0x10, ///< equity accounts selected last = 0x20 ///< the leftmost bit in the mask }; enum transactionTypeE { /** * Unknown transaction type (e.g. used for a transaction with only * a single split) */ Unknown, /** * A 'normal' transaction is one that consists out two splits: one * referencing an income/expense account, the other referencing * an asset/liability account. */ Normal, /** * A transfer denotes a transaction consisting of two splits. * Both of the splits reference an asset/liability * account. */ Transfer, /** * Whenever a transaction consists of more than 2 splits, * it is treated as 'split transaction'. */ SplitTransaction, /** * This transaction denotes a specific transaction where * a loan account is involved. Ususally, a special dialog * is used to modify this transaction. */ LoanPayment, /** * This transaction denotes a specific transaction where * an investment is involved. Ususally, a special dialog * is used to modify this transaction. */ InvestmentTransaction }; enum EnterScheduleResultCodeE { Cancel = 0, // cancel the operation Enter, // enter the schedule Skip, // skip the schedule Ignore // ignore the schedule }; static const int maxHomePageItems = 5; KMyMoneyUtils(); ~KMyMoneyUtils(); /** * This method is used to convert the internal representation of * an account type into a human readable format * * @param accountType numerical representation of the account type. * For possible values, see MyMoneyAccount::accountTypeE * @return TQString representing the human readable form translated according to the language cataglogue * * @sa MyMoneyAccount::accountTypeToString() */ static const TQString accountTypeToString(const MyMoneyAccount::accountTypeE accountType); /** * This method is used to convert an account type from it's * string form to the internal used numeric value. * * @param type reference to a TQString containing the string to convert * @return accountTypeE containing the internal used numeric value. For possible * values see MyMoneyAccount::accountTypeE */ static MyMoneyAccount::accountTypeE stringToAccountType(const TQString& type); /** * This method is used to convert a security type from it's * string form to the internal used numeric value. * * @param txt reference to a TQString containing the string to convert * @return eSECURITYTYPE containing the internal used numeric value. For possible * values see MyMoneySecurity::eSECURITYTYPE */ static MyMoneySecurity::eSECURITYTYPE stringToSecurity(const TQString& txt); /** * This method is used to convert the internal representation of * an security type into a human readable format * * @param securityType enumerated representation of the security type. * For possible values, see MyMoneySecurity::eSECURITYTYPE * @return TQString representing the human readable form translated according to the language cataglogue * * @sa MyMoneySecurity::securityTypeToString() */ static const TQString securityTypeToString(const MyMoneySecurity::eSECURITYTYPE securityType); /** * This method is used to convert the occurence type from it's * internal representation into a human readable format. * * @param occurence numerical representation of the MyMoneySchedule * occurence type * * @return TQString representing the human readable format translated according to the language cataglogue * * @sa MyMoneySchedule::occurenceToString() * * @deprecated Use i18n(MyMoneySchedule::occurenceToString(occurence)) instead */ static const TQString occurenceToString(const MyMoneySchedule::occurenceE occurence); /** * This method is used to convert the payment type from it's * internal representation into a human readable format. * * @param paymentType numerical representation of the MyMoneySchedule * payment type * * @return TQString representing the human readable format translated according to the language cataglogue * * @sa MyMoneySchedule::paymentMethodToString() */ static const TQString paymentMethodToString(MyMoneySchedule::paymentTypeE paymentType); /** * This method is used to convert the schedule weekend option from it's * internal representation into a human readable format. * * @param weekendOption numerical representation of the MyMoneySchedule * weekend option * * @return TQString representing the human readable format translated according to the language cataglogue * * @sa MyMoneySchedule::weekendOptionToString() */ static const TQString weekendOptionToString(MyMoneySchedule::weekendOptionE weekendOption); /** * This method is used to convert the schedule type from it's * internal representation into a human readable format. * * @param type numerical representation of the MyMoneySchedule * schedule type * * @return TQString representing the human readable format translated according to the language cataglogue * * @sa MyMoneySchedule::scheduleTypeToString() */ static const TQString scheduleTypeToString(MyMoneySchedule::typeE type); /** * This method is used to convert a numeric index of an item * represented on the home page into it's string form. * * @param idx numeric index of item * * @return TQString with text of this item */ static const TQString homePageItemToString(const int idx); /** * This method is used to convert the name of a home page item * to it's internal numerical representation * * @param txt TQString reference of the items name * * @retval 0 @p txt is unknown * @retval >0 numeric value for @p txt */ static int stringToHomePageItem(const TQString& txt); /** * Retrieve a KDE KGuiItem for the new schedule button. * * @return The KGuiItem that can be used to display the icon and text */ static KGuiItem scheduleNewGuiItem(void); /** * Retrieve a KDE KGuiItem for the account filter button * * @return The KGuiItem that can be used to display the icon and text */ static KGuiItem accountsFilterGuiItem(void); /** * This method adds the file extension passed as argument @p extension * to the end of the file name passed as argument @p name if it is not present. * If @p name contains an extension it will be removed. * * @param name filename to be checked * @param extension extension to be added (w/o the dot) * * @retval true if @p name was changed * @retval false if @p name remained unchanged */ static bool appendCorrectFileExt(TQString& name, const TQString& extension); static TQPixmap billScheduleIcon(int size); static TQPixmap depositScheduleIcon(int size); static TQPixmap transferScheduleIcon(int size); static TQPixmap scheduleIcon(int size); /** * Check that internal MyMoney engine constants use the same * values as the KDE constants. */ static void checkConstants(void); static TQString variableCSS(void); /** * This method searches a KDE specific resource and applies country and * language settings during the search. Therefore, the parameter @p filename must contain * the characters '%1' which gets replaced with the language/country values. * * The search is performed in the following order (stopped immediately if a file was found): * - @c \%1 is replaced with <tt>_\<country\>.\<language\></tt> * - @c \%1 is replaced with <tt>_\<language\></tt> * - @c \%1 is replaced with <tt>_\<country\></tt> * - @c \%1 is replaced with the empty string * * @c \<country\> and @c \<language\> denote the respective KDE settings. * * Example: The KDE settings for country is Spain (es) and language is set * to Galician (gl). The code for looking up a file looks like this: * * @code * * : * TQString fname = KMyMoneyUtils::findResource("appdata", "html/home%1.html") * : * * @endcode * * The method calls TDEStandardDirs::findResource() with the following values for the * parameter @p filename: * * - <tt>html/home_es.gl.html</tt> * - <tt>html/home_gl.html</tt> * - <tt>html/home_es.html</tt> * - <tt>html/home.html</tt> * * @note See TDEStandardDirs::findResource() for details on the parameters */ static TQString findResource(const char* type, const TQString& filename); /** * This method returns the split referencing a stock account if * one exists in the transaction passed as @p t. If none is present * in @p t, an empty MyMoneySplit() object will be returned. * * @param t transaction to be checked for a stock account * @return MyMoneySplit object referencing a stock account or an * empty MyMoneySplit object. */ static const MyMoneySplit stockSplit(const MyMoneyTransaction& t); /** * This method analyses the splits of a transaction and returns * the type of transaction. Possible values are defined by the * KMyMoneyUtils::transactionTypeE enum. * * @param t const reference to the transaction * * @return KMyMoneyUtils::transactionTypeE value of the action */ static transactionTypeE transactionType(const MyMoneyTransaction& t); /** * This method modifies a scheduled loan transaction such that all * references to automatic calculated values are resolved to actual values. * * @param schedule const reference to the schedule the transaction is based on * @param transaction reference to the transaction to be checked and modified * @param balances TQMap of (account-id,balance) pairs to be used as current balance * for the calculation of interest. If map is empty, the engine * will be interrogated for current balances. */ static void calculateAutoLoan(const MyMoneySchedule& schedule, MyMoneyTransaction& transaction, const TQMap<TQString, MyMoneyMoney>& balances); /** * Return next check number for account @a acc. */ static TQString nextCheckNumber(const MyMoneyAccount& acc); /** * Returns the text representing the reconcile flag. If @a text is @p true * then the full text will be returned otherwise a short form (usually one character). */ static TQString reconcileStateToString(MyMoneySplit::reconcileFlagE flag, bool text = false); /** * Returns the transaction for @a schedule. In case of a loan payment the * transaction will be modified by calculateAutoLoan(). * The ID of the transaction as well as the entryDate will be reset. * * @returns adjusted transaction */ static MyMoneyTransaction scheduledTransaction(const MyMoneySchedule& schedule); /** * This method tries to figure out the category to be used for fees and interest * from previous transactions in the given @a investmentAccount and returns the * ids of those categories in @a feesId and @a interestId. The last used category * will be returned. */ static void previouslyUsedCategories(const TQString& investmentAccount, TQString& feesId, TQString& interestId); }; #endif