00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef MYMONEYSEQACCESSMGR_H
00024 #define MYMONEYSEQACCESSMGR_H
00025
00026
00027
00028
00029
00030
00031
00032 #include "imymoneystorage.h"
00033 #include "imymoneyserialize.h"
00034 #include "mymoneymap.h"
00035
00055 class MyMoneyBalanceCacheItem {
00056 public:
00057 MyMoneyBalanceCacheItem() { valid = false; };
00058 MyMoneyBalanceCacheItem(const MyMoneyMoney& val) { balance = val; valid = true; };
00059
00060 bool operator == (const MyMoneyBalanceCacheItem& right) const;
00061 bool valid;
00062 MyMoneyMoney balance;
00063 };
00064
00078 class MyMoneySeqAccessMgr : public IMyMoneyStorage, public IMyMoneySerialize,
00079 public MyMoneyKeyValueContainer
00080 {
00081 public:
00082
00083 MyMoneySeqAccessMgr();
00084 ~MyMoneySeqAccessMgr();
00085
00086
00087 const MyMoneyPayee user(void) const { return m_user; };
00088 const QDate creationDate(void) const { return m_creationDate; };
00089 const QDate lastModificationDate(void) const { return m_lastModificationDate; };
00090 unsigned int currentFixVersion(void) const { return m_currentFixVersion; };
00091 unsigned int fileFixVersion(void) const { return m_fileFixVersion; };
00092
00093
00094
00095 void setUser(const MyMoneyPayee& user) { m_user = user;
00096 touch(); };
00097 void setCreationDate(const QDate& val) { m_creationDate = val; touch(); };
00098 void setLastModificationDate(const QDate& val) { m_lastModificationDate = val; m_dirty = false; };
00099 void setFileFixVersion(const unsigned int v) { m_fileFixVersion = v; };
00103 KSharedPtr <MyMoneyStorageSql> connectToDatabase (const KURL& url);
00109 virtual void fillStorage() { };
00110
00116 MyMoneySeqAccessMgr const * duplicate(void);
00117
00125 const MyMoneyAccount account(const QString& id) const;
00126
00134 bool isStandardAccount(const QString& id) const;
00135
00153 void setAccountName(const QString& id, const QString& name);
00154
00162 void addAccount(MyMoneyAccount& account);
00163
00171 void addPayee(MyMoneyPayee& payee);
00172
00181 const MyMoneyPayee payee(const QString& id) const;
00182
00192 const MyMoneyPayee payeeByName(const QString& payee) const;
00193
00201 void modifyPayee(const MyMoneyPayee& payee);
00202
00210 void removePayee(const MyMoneyPayee& payee);
00211
00218 const QValueList<MyMoneyPayee> payeeList(void) const;
00219
00228 void addAccount(MyMoneyAccount& parent, MyMoneyAccount& account);
00229
00239 void addInstitution(MyMoneyInstitution& institution);
00240
00252 void addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate = false);
00253
00266 void modifyAccount(const MyMoneyAccount& account, const bool skipCheck = false);
00267
00276 void modifyInstitution(const MyMoneyInstitution& institution);
00277
00286 void modifyTransaction(const MyMoneyTransaction& transaction);
00287
00296 void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent);
00297
00304 void removeTransaction(const MyMoneyTransaction& transaction);
00305
00315 void removeAccount(const MyMoneyAccount& account);
00316
00324 void removeInstitution(const MyMoneyInstitution& institution);
00325
00334 const MyMoneyTransaction transaction(const QString& id) const;
00335
00344 const MyMoneyTransaction transaction(const QString& account, const int idx) const;
00345
00353 bool hasActiveSplits(const QString& id) const;
00354
00366 const MyMoneyMoney balance(const QString& id, const QDate& date = QDate()) const;
00367
00379 const MyMoneyMoney totalBalance(const QString& id, const QDate& date = QDate()) const;
00380
00388 const MyMoneyInstitution institution(const QString& id) const;
00389
00396 bool dirty(void) const { return m_dirty; }
00397
00404 void setDirty(void) { m_dirty = true; };
00405
00412 const QValueList<MyMoneyInstitution> institutionList(void) const;
00413
00421 void accountList(QValueList<MyMoneyAccount>& list) const;
00422
00439 void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const;
00440
00457 void transactionList(QValueList< QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const;
00458
00462 const QValueList<MyMoneyTransaction> transactionList(MyMoneyTransactionFilter& filter) const;
00463
00468 bool isDuplicateTransaction(const QString& id) const { return m_transactionKeys.contains(id); }
00469
00481 unsigned int transactionCount(const QString& account = QString()) const;
00482
00483 const QMap<QString, unsigned long> transactionCountMap(void) const;
00484
00491 unsigned int institutionCount(void) const;
00492
00499 unsigned int accountCount(void) const;
00500
00505 const MyMoneyAccount liability(void) const { return account(STD_ACC_LIABILITY); };
00506
00511 const MyMoneyAccount asset(void) const { return account(STD_ACC_ASSET); };
00512
00517 const MyMoneyAccount expense(void) const { return account(STD_ACC_EXPENSE); };
00518
00523 const MyMoneyAccount income(void) const { return account(STD_ACC_INCOME); };
00524
00529 const MyMoneyAccount equity(void) const { return account(STD_ACC_EQUITY); };
00530
00531 virtual void loadAccounts(const QMap<QString, MyMoneyAccount>& acc);
00532 virtual void loadTransactions(const QMap<QString, MyMoneyTransaction>& map);
00533 virtual void loadInstitutions(const QMap<QString, MyMoneyInstitution>& map);
00534 virtual void loadPayees(const QMap<QString, MyMoneyPayee>& map);
00535 virtual void loadSchedules(const QMap<QString, MyMoneySchedule>& map);
00536 virtual void loadSecurities(const QMap<QString, MyMoneySecurity>& map);
00537 virtual void loadCurrencies(const QMap<QString, MyMoneySecurity>& map);
00538 virtual void loadPrices(const MyMoneyPriceList& list);
00539
00540 virtual void loadAccountId(const unsigned long id);
00541 virtual void loadTransactionId(const unsigned long id);
00542 virtual void loadPayeeId(const unsigned long id);
00543 virtual void loadInstitutionId(const unsigned long id);
00544 virtual void loadScheduleId(const unsigned long id);
00545 virtual void loadSecurityId(const unsigned long id);
00546 virtual void loadReportId(const unsigned long id);
00547 virtual void loadBudgetId(const unsigned long id);
00548
00549 virtual unsigned long accountId(void) const { return m_nextAccountID; };
00550 virtual unsigned long transactionId(void) const { return m_nextTransactionID; };
00551 virtual unsigned long payeeId(void) const { return m_nextPayeeID; };
00552 virtual unsigned long institutionId(void) const { return m_nextInstitutionID; };
00553 virtual unsigned long scheduleId(void) const { return m_nextScheduleID; };
00554 virtual unsigned long securityId(void) const { return m_nextSecurityID; };
00555 virtual unsigned long reportId(void) const { return m_nextReportID; };
00556 virtual unsigned long budgetId(void) const { return m_nextBudgetID; };
00557
00558
00566 const QString value(const QString& key) const;
00567
00575 void setValue(const QString& key, const QString& val);
00576
00584 void deletePair(const QString& key);
00585
00586
00587 const QMap<QString, QString> pairs(void) const;
00588
00589
00590 void setPairs(const QMap<QString, QString>& list);
00591
00602 void addSchedule(MyMoneySchedule& sched);
00603
00612 void modifySchedule(const MyMoneySchedule& sched);
00613
00622 void removeSchedule(const MyMoneySchedule& sched);
00623
00633 const MyMoneySchedule schedule(const QString& id) const;
00634
00644 virtual void addSecurity(MyMoneySecurity& security);
00645
00654 void modifySecurity(const MyMoneySecurity& security);
00655
00664 void removeSecurity(const MyMoneySecurity& security);
00665
00675 const MyMoneySecurity security(const QString& id) const;
00676
00677
00682 const QValueList<MyMoneySecurity> securityList(void) const;
00683
00693 void addCurrency(const MyMoneySecurity& currency);
00694
00703 void modifyCurrency(const MyMoneySecurity& currency);
00704
00713 void removeCurrency(const MyMoneySecurity& currency);
00714
00724 const MyMoneySecurity currency(const QString& id) const;
00725
00734 const QValueList<MyMoneySecurity> currencyList(void) const;
00735
00762 const QValueList<MyMoneySchedule> scheduleList(const QString& accountId = QString(),
00763 const MyMoneySchedule::typeE type = MyMoneySchedule::TYPE_ANY,
00764 const MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY,
00765 const MyMoneySchedule::paymentTypeE paymentType = MyMoneySchedule::STYPE_ANY,
00766 const QDate& startDate = QDate(),
00767 const QDate& endDate = QDate(),
00768 const bool overdue = false) const;
00769
00770 const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
00771 int scheduleOcurrences,
00772 int schedulePaymentTypes,
00773 QDate startDate,
00774 const QStringList& accounts=QStringList()) const;
00775
00784 const QValueList<MyMoneyReport> reportList( void ) const;
00785
00796 void addReport( MyMoneyReport& report );
00797
00806 void loadReports( const QMap<QString, MyMoneyReport>& reports );
00807
00816 void modifyReport( const MyMoneyReport& report );
00817
00824 unsigned countReports(void) const;
00825
00835 const MyMoneyReport report( const QString& id ) const;
00836
00845 void removeReport(const MyMoneyReport& report);
00846
00855 const QValueList<MyMoneyBudget> budgetList( void ) const;
00856
00867 void addBudget( MyMoneyBudget& budget );
00868
00877 void loadBudgets(const QMap<QString, MyMoneyBudget>& budgets);
00878
00888 const MyMoneyBudget budgetByName(const QString& budget) const;
00889
00898 void modifyBudget( const MyMoneyBudget& budget );
00899
00906 unsigned countBudgets(void) const;
00907
00917 MyMoneyBudget budget( const QString& id ) const;
00918
00927 void removeBudget(const MyMoneyBudget& budget);
00928
00929
00933 void addPrice(const MyMoneyPrice& price);
00934
00938 void removePrice(const MyMoneyPrice& price);
00939
00944 const MyMoneyPrice price(const QString& fromId, const QString& toId, const QDate& date, const bool exactDate) const;
00945
00949 const MyMoneyPriceList priceList(void) const;
00950
00954 void clearCache(void);
00955
00967 bool isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck = MyMoneyFileBitArray()) const;
00968
00973 void rebuildAccountBalances(void);
00974
00975 virtual void startTransaction(void);
00976 virtual bool commitTransaction(void);
00977 virtual void rollbackTransaction(void);
00978
00979 protected:
00980 void removeReferences(const QString& id);
00981
00982 private:
00983
00984 static const int INSTITUTION_ID_SIZE = 6;
00985 static const int ACCOUNT_ID_SIZE = 6;
00986 static const int TRANSACTION_ID_SIZE = 18;
00987 static const int PAYEE_ID_SIZE = 6;
00988 static const int SCHEDULE_ID_SIZE = 6;
00989 static const int SECURITY_ID_SIZE = 6;
00990 static const int REPORT_ID_SIZE = 6;
00991 static const int BUDGET_ID_SIZE = 6;
00992
00997 void touch(void);
00998
01005 void invalidateBalanceCache(const QString& id);
01006
01011 MyMoneyPayee m_user;
01012
01018 unsigned long m_nextInstitutionID;
01019
01025 unsigned long m_nextAccountID;
01026
01032 unsigned long m_nextTransactionID;
01033
01039 unsigned long m_nextPayeeID;
01040
01046 unsigned long m_nextScheduleID;
01047
01053 unsigned long m_nextSecurityID;
01054
01055 unsigned long m_nextReportID;
01056
01062 unsigned long m_nextBudgetID;
01063
01068 MyMoneyMap<QString, MyMoneyInstitution> m_institutionList;
01069
01074 MyMoneyMap<QString, MyMoneyAccount> m_accountList;
01075
01080 mutable QMap<QString, MyMoneyBalanceCacheItem> m_balanceCache;
01081
01087 mutable QDate m_balanceCacheDate;
01088
01094 MyMoneyMap<QString, MyMoneyTransaction> m_transactionList;
01095
01101 MyMoneyMap<QString, QString> m_transactionKeys;
01102
01106 MyMoneyMap<QString, MyMoneyPayee> m_payeeList;
01107
01111 MyMoneyMap<QString, MyMoneySchedule> m_scheduleList;
01112
01120 MyMoneyMap<QString, MyMoneySecurity> m_securitiesList;
01121
01125 MyMoneyMap<QString, MyMoneySecurity> m_currencyList;
01126
01127 MyMoneyMap<QString, MyMoneyReport> m_reportList;
01128
01132 MyMoneyMap<QString, MyMoneyBudget> m_budgetList;
01133
01134 MyMoneyMap<MyMoneySecurityPair, MyMoneyPriceEntries> m_priceList;
01135
01139 bool m_dirty;
01140
01146 QDate m_creationDate;
01147
01152 QDate m_lastModificationDate;
01153
01158 unsigned int m_currentFixVersion;
01163 unsigned int m_fileFixVersion;
01168 QString nextInstitutionID(void);
01169
01174 QString nextAccountID(void);
01175
01180 QString nextTransactionID(void);
01181
01186 QString nextPayeeID(void);
01187
01192 QString nextScheduleID(void);
01193
01198 QString nextSecurityID(void);
01199
01200 QString nextReportID(void);
01201
01206 QString nextBudgetID(void);
01207
01208
01219 void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent, const bool sendNotification);
01223 void close(void) {}
01224
01230 bool m_transactionListFull;
01231 };
01232 #endif