Recently (August, 2010), I’ve been developing a Personal Finance Manager package for managing our household budget, checkbook, credit cards, etc.
This has actually evolved into a nice little package. It uses JQuery, DataTables, AJAX, Data Access Objects, PHP and MySQL. It runs under the Apache web server, which is nice because you can run it on a web server and both you and your wife or husband can post transactions, reconcile bank statements and run reports.
Since it is a web-based application, you do need a web server to run it. So it’s not for the faint of heart.
I’ve actually been able to re-use this package as a generic web application development framework as well.
The project uses phpdaogen to generate the Data Access Objects from the MySQL schema. Phpdaogen is a project I developed specifically for use in my Personal Finance Manager application, because I didn’t like the licenses for any of the other DAO packages I found. Phpdaogen also includes a PreparedStatement implementation for MySQL under PHP without using mysqli (which is buggy and tends to crash).
The package requires the json PECL module to be installed. Under Red Hat/Fedora/CentOS, this requires that you install the php-json package.
One really cool thing about the package is that all form submissions and page updates are done through AJAX, so there is no need for page reloads. This makes the application very snappy and responsive.
The Personal Finance Manager package is licensed under the BSD license, so you can basically use or adapt it for free, even for commercial use.
You can download it here: Personal Finance Manager
I’m available for consultation, customization and training at a reasonable rate. Use the “Contact Us” form to send me an inquiry.
Brilliant idea! Think I’m going to adapt it for my project.
Feel free! I released the whole thing under BSD license, so you can do pretty much anything you want with it that the license allows, as long as you give attribution and don’t claim that you wrote it.
Hello, can you please send me the latest version of your package by email because for some reason I cannot download it.
Could you, please tell me what would be your rate for support issues?
Please, write to me to the above mentioned mail.
Thanks,
Evgeny
The latest code is available on the SourceForge project page: http://sourceforge.net/projects/javaocr
Nice job..simple and clean. I have one question. does it have import feature and if yes what extentions
Yes, it does. With the latest version from the SourceForge project page http://sourceforge.net/projects/pfmgr you can import your bank statement in CSV format, for reconciliation purposes. Currently it supports the CSV format provided by Wells Fargo. It will automatically match up the transactions in the CSV statement, highlighting any mismatches or multiple matches. You can then correct the problems, click the Reconcile button, and it will reconcile your bank statement.
Looks really great. Can you assign categories to transactions? I don’t see it in the screenshots. I’ll have to download it and give it a whirl.
Yes. The categories are called “Income/Expense”. So you can get reports of your incomes and expenses by categorizing your transactions using the Income/Expense categories.
Hi,
I create new user in myPHP Admin
User: pfm
Password: 123pFm321
And now, I got the login page! But after type “admin” on all username and password, I got below massage. Please help…
Fatal error: Uncaught exception ‘Exception’ with message ‘MySQL Error 1146 Table ‘pfm.pfmUser’ doesn’t exist page: /pfmgr/html/index.php’ in /mnt/disk1/HTTPX/htdocs/pfmgr/html/classes/dao/MySQLConnection.class.php:105 Stack trace: #0 /mnt/disk1/HTTPX/htdocs/pfmgr/html/classes/dao/abstract/PfmUserDAOAbstract.class.php(294): MySQLConnection->executeQuery(Object(PreparedStatement)) #1 /mnt/disk1/HTTPX/htdocs/pfmgr/html/classes/dao/abstract/PfmUserDAOAbstract.class.php(132): PfmUserDAOAbstract->findWithPreparedStatement(Object(PreparedStatement)) #2 /mnt/disk1/HTTPX/htdocs/pfmgr/html/include/requireLogin.include.php(78): PfmUserDAOAbstract->findByUserName(‘admin’) #3 /mnt/disk1/HTTPX/htdocs/pfmgr/html/index.php(7): include(‘/mnt/disk1/HTTP…’) #4 {main} thrown in /mnt/disk1/HTTPX/htdocs/pfmgr/html/classes/dao/MySQLConnection.class.php on line 105
You’ll have to follow the instructions in INSTALL.txt in order to get it running. There really are no shortcuts.
If you read my previous post, there’s a database schema management system built into the JAX Framework on which pfmgr is built.
Is it possible to get an exported empty mysql database (.sql) so that I can setup and try this software. I am a windows user running a wamp server. Thanks
First, you’d need to run the “create database” and “grant” commands found in ddl/initdb under the mysql case.
After that, you’d have to run this command to get the initial SQL required to get the database built out: php phpdaogen/ddltosql.php ddl/*.ddl.yaml
However, be aware that you would be DEFEATING the automatic schema update mechanism of the JAX Framework (pfmgr is written on top of an old version of JAX Framework) [ http://jaxframework.org ]. So when you update pfmgr in the future, your database schema will be out of date and incompatible with the new version. The ddl/updateSchema script is provided in order to bring the database schema into line with the schema files in the current version of pfmgr.
Honestly, I don’t recommend going this route. With freely available desktop virtualization solutions like VirtualBox and VMWare, plus freely available Linux server distros like CentOS and Ubuntu Server, there’s no excuse for using WAMP, XAMPP or other substandard LAMP environments which don’t have proper Linux shell and PHP command-line functionality. Just download VirtualBox and CentOS and set up a CentOS virtual server that runs in a window on your desktop. Then install pfmgr into the CentOS virtual server using the instructions in INSTALL.txt. Done.
I just installed the software on my web server. and I used the phpadmin to create database and user. I’m getting the same error what scorch was getting. I really dont know where and how to run the initdb command to run the database commands. I’m hosting my website on a server that allows php and sql extensions. Please help. I can’t use the default schema as my webserver will put a prefix on every database name i create.
If you don’t have shell access to your server, there’s not much you can do. Nor would you want to, because it would defeat the automatic schema updates when you upgrade to a newer release of the PFMgr project.
The JAX framework on which the PFMgr was built, was designed to manage the database schema for you, including automatic updates to the database schema as new releases of the project come out. But in order to do this, it requires that you have Linux command-line access in order to run the initdb script at the initial installation, and the updateSchema script when upgrading to a newer version of the PFMgr project.
Some future version of the JAX framework may provide a web-based way to do the schema creation and updates (I’m also the author and maintainer of the JAX framework). Maybe something along the lines of how WordPress and other CMS systems do it. But for now, it’s strictly Linux command line.
One thing you can do, which works quite well actually, is to set up a CentOS Linux instance running inside VirtualBox on your desktop. Then just run the PFMgr package inside that.
Can you design a web based finance software that is multi user with role base access?? I need something that is web based? I’m willing to pay for the effort and time.
The pfmgr project is already web-based and multi-user with role-based access. Feel free to try it out. It only runs on Linux though, so if you’re a Windows fan, I’d recommend installing a Linux VM under VirtualBox or VMWare.
hello
can you add simple inventory tracking ?
also can you add simple invoice so we can sell goods and services
the script has muli user access so it is ready to be simple smart accounting software
best regards
Natural Honey
Thanks for your question.
Actually, the Personal Finance Manager project is only intended to be a checkbook reconciliation and spending tracking package. Inventory Control, Purchasing, Sales and Invoicing, Accounts Receivable, Accounts Payable, General Ledger would be part of a larger Enterprise Resource Management (ERP) package.
I’ve been developing ERP software professionally since 1987. I do have a new ERP package which is built on the same framework, but it is proprietary and requires a monthly support contract. If you’re interested, contact me at hostmaster at roncemer dot com, and I’ll show you a demo. If you would like to become a customer, the package should be available for new customers within about three months. We are beta testing it at some sites now.
Hi Ron,
I’m not able to make your app working!
I’m using a virtualbox debian installation. Followed instruction in INSTALL.txt, but I get following error when I try to create new users:
[Fri Jun 06 17:06:41 2014] [error] [client 10.0.2.2] PHP Notice: Undefined property: stdClass::$keepMeLoggedInUniqueId in /home/pfmgr/html/classes/dao/abstract/PfmUserDAOAbstract.class.php on line 35, referer: http://127.0.0.2:8880/pfmgr/user.php
[Fri Jun 06 17:06:41 2014] [error] [client 10.0.2.2] PHP Notice: Undefined property: stdClass::$keepMeLoggedInExpires in /home/pfmgr/html/classes/dao/abstract/PfmUserDAOAbstract.class.php on line 36, referer: http://127.0.0.2:8880/pfmgr/user.php
[Fri Jun 06 17:06:41 2014] [error] [client 10.0.2.2] PHP Fatal error: Uncaught exception ‘Exception’ with message ‘MySQL Error 1048 Column ‘keepMeLoggedInUniqueId’ cannot be null page: /pfmgr/user.php’ in /home/pfmgr/html/classes/dao/MySQLConnection.class.php:60\nStack trace:\n#0 /home/pfmgr/html/classes/dao/abstract/PfmUserDAOAbstract.class.php(39): MySQLConnection->executeUpdate(Object(PreparedStatement))\n#1 /home/pfmgr/html/user.php(261): PfmUserDAOAbstract->insert(Object(stdClass))\n#2 {main}\n thrown in /home/pfmgr/html/classes/dao/MySQLConnection.class.php on line 60, referer: http://127.0.0.2:8880/pfmgr/user.php
Can you help me with this?
I just fixed that bug and created a new release. You can download it now.
Hi Ron
I have installed PFM and all seems to be working fine except for adding a new user. It seems to be crashing in user.php. Is there an easy way to debug?
Many thanks
Tim
Tail Apache’s error log, and send me the error message. This project was written on top of an old version of JAX Framework, and there have been a lot of changes to JAX Framework since it was developed. If I get some free time in the future, I may go ahead and re-write the pfmgr project on top of the latest JAX Framework. But I don’t have a lot of free time on my hands at present.
Hi Ron, I am planning on doing some bug fixes, a couple of added features, and extend/improve the reporting.
Would it be better to start with an updated JAX framework first?
Have you started updating PFM to the new framework yet?
Any idea how much work is involved in updating PFM to the new framework? Perhaps I can have a go at that.
I am a user on Sourceforge and GitHub so would be happy to give back my mods and fixes.
You have my email address so feel free to email me.
Cheers, Graham
Hi, Graham.
I have not done any work on re-doing the PFM project in the latest JAX framework. I’ve been super-busy for the past few years with my ProfitEagle ERP project and my day job, both of which use the JAX framework. I stopped using PFM a few years ago when we were spending most of our time in Southeast Asia.
I would love to see someone take up the project and do a version 2.0 which is built 100% on top of the latest JAX framework, taking advantage of the code generators, help system, and other features of the framework. I’d also like to see the camelCase table and column names be replaced with all-lowercase names, with underscores separating the words in the column names. The camelCase identifiers were a show-stopper when it came to porting to postgresql and other database engines which don’t preserve the case in identifiers. And I didn’t realize this until after PFM was completed.
JAX Framework grew out of PFM, and now PFM itself has gotten left behind.
So…If you’d like to take over PFM, port it to the latest JAX framework, and convert the SQL identifiers to all lowercase, I’d love to have the help with it. I just don’t have time to play around with it lately. Send me a message on GitHub, and I’ll add you as a project admin.
Thanks!
Ron
Perhaps it would be best for you to load PFM onto github first so I can use the issue system to request access. PFM is on Sourceforge only at the moment (I could not see it in your repo list).
Graham
Hi Graham,
I’ve created a new pfmgr2 project under GitHub, and added you as a collaborator.
I took the base JAX Framework project, added in the schema for the old pfmgr tables, changing the camelCase names to all lowercase with underscores between words in the column names.
I also generated initial search/CRUD code-generator YAML files for these tables, so you’ll have a good starting point.
As far as I can remember, all you need to do to get pfmgr2 working, is to bring in any custom logic which was coded in the original pfmgr, adapting the table and column names to match what they are in pfmgr2.
Under posting type CRUD, you’ll need to provide a way to assign each posting type to multiple account types. There’s already a many-many relation table for that. Just look at the old project to see how I did it, and you can either replicate that, or use the new jax-grid which uses AngularJS to implement an editable table for creating one-many relations.
Under postings, you’ll need to be able to assign income/expense amounts for the disbursements for each posting, with the total of the disbursements matching the amount of the posting.
For the most part, the project will just consist of bringing in code from the old project, and changing the old names to match the new.
Good luck, and keep me posted. My email address: ron at roncemer dot com.
Thanks!
Ron
I just fixed the bug with adding users. There’s a new release available to download now.
i am not able to install it on WAMP on Windows 7 please guide me step by step
This is a Linux application. I’d recommend running it on a Linux box, or if needed, you can create a Linux VM instance under VirtualBox.
Hi,
Looking at config/database.ini.sample, it looks like it is possible to use Postgresql database instead of Mysql. But when I run ddl/regenDAO, I get the following error message :
“PHP Fatal error: Class ‘mysqli’ not found in /opt/pfmgr/phpdaogen/MySQLiConnection.class.php on line 34”
Do you have any idea what to do ?
Thanks for your help
Pancho
PostgreSQL support is completely untested. The probability of it working flawlessly is near zero.
Sounds as if you’re configured to use the mysqli PHP extension. In that case, you need to make sure that either the mysqli or mysqlnd PHP extension is installed. Once you have that, you should be in good shape.
Hi,
Thanks for your answer. I will try to install Mysql instead.
Finally, I found the error : I changed the password for user pfm in file /config/database.ini after running the ddl/initdb, thus the password in file /html/classes/ConnectionFactory.class.php was wrongly set.
Now I will start to use the application.
/Pancho
Great! Sounds good. Hope it works well for you!
Hi!
I have a problem. I installed and configured (I hope) already, but when I would like to access in a browser it has a blank white screen. A page source is empty.
What do you think? thanks for your answer!
I recommend checking the apache error log. Something like /var/log/httpd/error_log (RHEL) or /var/log/apache2/error.log (Debian/Ubuntu). Usually when that happens, it’s due to one of the required PEAR or PECL modules not being installed.
Hey! Like the application, however I’m having some trouble getting it to function on my server, I have followed all instructions included but I’m getting the following errors:
Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] PHP Warning: mysqli::mysqli(): (28000/1045): Access denied for user ‘pfm’@’localhost’ (using password: YES) in /home/********/public_html/finance/html/classes/dao/MySQLiConnection.class.php on line 34
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] PHP Fatal error: Uncaught exception ‘Exception’ with message ‘Database connection failed; errno 1045 – Access denied for user ‘pfm’@’localhost’ (using password: YES)’ in /home/********/public_html/finance/html/classes/dao/MySQLiConnection.class.php:38
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] Stack trace:
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] #0 /home/********/public_html/finance/html/classes/ConnectionFactory.class.php(15): MySQLiConnection->MySQLiConnection(‘localhost’, ‘pfm’, ‘123pFm321’, ‘pfm’)
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] #1 /home/********/public_html/finance/html/include/requireLogin.include.php(47): ConnectionFactory::getConnection()
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] #2 /home/********/public_html/finance/html/index.php(7): include(‘/home/fluffyfil…’)
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] #3 {main}
[Sun Jan 25 20:21:52 2015] [error] [client ***.***.***.***] thrown in /home/********/public_html/finance/html/classes/dao/MySQLiConnection.class.php on line 38
It appears to be seeing the default database login details, even though I’ve updated the .ini file & run the initdb & regenDAO commands.
Any tips?
Thanks 🙂
Make sure you copy database.ini.sample to database.ini, and edit database.ini, not database.ini.sample. Also, if you’re on a hosted MySQL instance, you may not have all of the permissions you need. If that’s the case, I’d recommend checking with the hosting company.
Hi,
This tool is really great. I installed it on my server (Ubuntu 10.04) and I can now access my personal finance from any internet point.
I just have one problem with the reports :
I have 4 accounts and when I run the 2 reports (Posting details or Income/Expenses) and select all the accounts, it does not work.
When I select only the first account, it works well.
When I select only the second, the third or the fourth account, it does not work either.
Do you know how to solve this issue ?
Thanks for your support
You’re welcome to submit a bug patch for this on the project page. Thanks!
Hi,
I am working through the install instructions on my vps and have come to the following error when entering in: ddl/regenDAO
PHP Fatal error: Class ‘mysqli’ not found in /pfmgr/phpdaogen/MYSQLiConnection.class.php on line 34
I’m using centos, any suggestions?
Thanks!
yum install php-mysql
Have a nice day,
installed pfmgr to debian works fine, the only issue had to do with mysql . Mysql saves greek characters as chinese, even thought pfmgr shows them as they are greek. So when I export pfm database for backup greek letters cannot be seen. I while search about it.
Thank you
Stavros
You’ll want to make sure the tables are using one of the case-insensitive utf8 character encodings. Probalbly either utf8_general_ci or utf8_unicode_ci.