Every repository with this icon (
Every repository with this icon (
| Description: | A web-based personal finance manager with a focus on non-OCD budgeting and avoiding credit card debt edit |
-
Processing EventsController#create (for 127.0.0.1 at 2009-05-16 11:08:29) [POST]
[snip]
Processing ApplicationController#index (for 127.0.0.1 at 2009-05-16 11:08:30) [GET]
ActionController::RoutingError (No route matches "/images/success16.png" with {:method=>:get}):
Rendering rescues/layout (not_found)
Comments
-
Details
Everyone has payments that need to go out weekly, fortnightly etc. Schedules would work with these payments and in combination with buckets, to ensure they that amounts needed are met on time by indicating via green/orange/red current values for scheduled events, and to automatically create expenses that have occurred since your last login. The reverse where money is expected on a regular basis would in turn add deposits that occurred since your last login. This makes management of bills/automatic payments easier to keep track of. It would also be constructed so that if a expense/deposit is created, you'll get alerts on the dashboard to review the payments made, with the ability to delete that payment, amend etc.
Model Implementation
User has many schedules
Bucket has many actions, has many schedules through actions
Schedule model that belongs to account, has user through account, has many actions, has many buckets through actions. Has the fields:
- id
- account_id
- name
- scheduled_time
- recurrence (in # weeks)
- last_executed
Action model that belongs to schedule, belongs to bucket. Has the fields:
- id
- schedule_id
- bucket_id
- type (expense/deposit/transfer)
- amount (in $)
Routes Implementation
- /accounts/1/schedules
- /accounts/1/schedules/new
- /accounts/1/schedules/edit/5
- /accounts/1/schedules/show/5
- /accounts/1/schedules/destroy/5
- /buckets/5/schedules
UI Implementation
Dashboard, Buckets show, and accounts show would get new widget "Upcoming Schedules" listing name and when. Clicking will take them to schedule show page, listing the actions that schedule has in details (what type, what bucket, how much) and showing how much in in there at present in the buckets it'll be taking action in. Depending on the pages visited, schedules will be constrained to that area (dash = all, account = only in account, bucket = only in bucket).
Dashboard would get new widget "Recent Alerts" listing events that took place since the last login, with links to each transaction that took place for review.
- (you may know of a faster more efficient way to do this, but the idea is here)
- When you login, schedules are checked against the current time, scheduled time, and the last executed time. Formula for finding schedules via SQL is something like WHERE (Time.now > schedule.scheduled_time AND schedule.scheduled_time > schedule.last_executed ) (essentially, run schedules that have occurred prior to now, but after the last execution).
- The schedule is then executed (its actions are run, depositing/subtracting money from the baskets it's tied to). and the alerts model is then populated as needed in a before_filter so alerts are available on the next request
- The schedule is then either deleted if it isn't needed again, or is updated with Time.now for the execution time, and scheduled_time becomes scheduled_time + recurrence.weeks (where recurrence is number weeks after the last scheduled_time that is should run again)
- A query is run again to ensure no more schedules have taken place (incase user doesn't login for 2/3 weeks. Something like this
- while Schedule.count(:conditions => "#{Time.now} > schedule.scheduled_time AND schedule.scheduled_time > schedule.last_executed") > 0
Any place where buckets are listed (account buckets, dashboard etc) get modified to include amounts of transactions coming within 7 days of today. The label will be colored according to time remaining and money available.
- In the case that we have funds in that basket are met, the label is green
- In the case that the funds in that basket are below required levels, and the next schedule is 2 or more days, the label is orange
- In the case that the funds in that basket are below required levels, and the next schedule is within 2 days, the label is red
Schedule show/destroy don't need any specific stuff, however add will need the following:
- The link to the page will be within an account page, next to 'Buckets in xxxxx' called 'Add Schedule in xxxxx' (along with view schedules in xxxxx)
- The new schedule form will need the following fields
- Account selection dropdown (default to current account)
- Actions section similar to multiple buckets expenses/deposit where you can add extra buckets. Each line has a bucket dropdown for the current account, a type dropdown (expense/deposit/transfer) and an amount). These populate actions association
- First payment section where it has year, months and day fields. This populates the scheduled time field on creation
- Recurrence section where you select either "one time payment" (for future payment usage, this would make recurrence fields nil) or you select the occurrence. Weekly, fortnightly, monthly, or a text fields to specify number of weeks. That amount is stored in the schedules recurrence field and used as described in the section on how alerts are created.
Schedules should be able to be skipped. On the schedule show page, you should be able to "Skip the next occurrence", which would then make scheduled_time on the model == (scheduled_time + recurrence.weeks), effectively skipping it till next time.
Conclusion
I think think this feature would be quite useful. If you have any questions about its implementation, let me know.
Comments
Sounds like you've about got it done. :) It's on my plate to implement, as this is a feature I've wanted, too, but I suspect my solution will be much simpler than what you've described here. If you'd rather implement this to your own specification, let me know and I'll hold off on mine until a patch is ready.
I'd love to help but if I can't get it done sometime tomorrow, I probably won't have time for another week or two :-( If I find some time to implement it, and it's not already done, I'll give a shot and let you know.
Took a crack at implementing this. Code at
http://github.com/KieranP/bucketwise/commit/cd4fe87be309be492f1ae7700dd34f9084ebd1a6
Adding, editing, deleting and upcoming schedules are implemented. Still got to implement code to execute the actions along with other things (see commit message).
Feel free to take and continue with it. Sorry for the lack of tests.
That's all the time I'll have till next weekend. Hope this has helped.
-
2 comments Created 7 months ago by sbfaulknerinternationalization/internationalisationin-progressxnot so much an issue to act on as notification of work in progress for anyone else who is interested...
both Simon Jefford and I have (independently) begun to work on internationalizing bucketwise (for en-UK and en-CA locales respectively)
our forks/branches reside at:
http://github.com/simonjefford/bucketwise/tree/britishify
http://github.com/sbfaulkner/bucketwise/tree/globalizecheers.
Comments
JonathanTron
Wed May 27 08:09:27 -0700 2009
| link
I worked on something on my own too, you can find it here : http://github.com/JonathanTron/bucketwise/
I worked on fr-FR and already extracted all strings from views, but the new credit card maximum feature.
The next step will be to update the javascript to allow localization of alerts and calculation (numbers display/parse). -
2 comments Created 7 months ago by jamisShow bucket and account balances in dropdownsfeature-requestxWhen selecting which account/bucket is the source for a transaction, it'd be nice to see what the current balance is, as well.
Comments
I played with this a bit tonight, and it actually makes the dropdowns pretty noise (and a bit confusing) to show the balances right there. Perhaps the better solution would be to show the current balance in a separate span next to the dropdown, after selecting an account/bucket? Could even dynamically update it to show what the balance would be after saving the transaction. Have to think about this some more.
-
Won't go into as much detail as my last ticket. Basically, you manually enter (unless you can link an API which would be neat) the current conversion rates for different countries into a Conversion model, then whenever you hover over a price, you can select a currency and it'll process it and show you how much it is. This will be handy if you want to buy something online using a CC, and want to know how much $$ you have left in that account in another currency. This'll tie in with account options for if/when bucketwise supports euros and such (instead of just dollars).
Comments
As nifty as this sounds, I'm not sure that I would want something like this in BucketWise. However, if it is something you need, please feel free to fork Bucketwise and implement it there; if the implementation doesn't complicate things too much, I'd be willing to consider it for inclusion in my copy.
-
Sorting by occurred_on/id is more logical than occurred_on/updated_at
2 comments Created 6 months ago by KieranPWhen someone edits an item that was made on the same date as another item, it gets repositioned higher in the list.
For people who want to structure their data, to compare against bank accounts, it becomes tricky when they edit an item.
http://github.com/KieranP/bucketwise/commit/3821ab2d362d6156e8644aa60dfdcdbd785291fe
Using that patch, it sorts by occurred_on, and then by id, to maintain the order people add items.
Comments
I'm always uncomfortable with sorting by id, since it's not formally defined as being a monotonically increasing value. I think it might be better to sort events by (occurred_on, created_at), since created_at has, by definition, an order defined for it.
Also, the sql-nazi in me is cringing, slightly, at the thought of performing a query like that without having the full sort criteria in the index. Given, though, that the number of events having the same occurred_on value will be small, it's probably going to fine without including created_at (or id, if you can convince me).
Sure, created_at sounds like a better column to sort by. Not sure what you mean by "without having the full sort criteria in the index", however the number of events on the same day is not small. Using a joint account, I can see upward of 15 or more sometimes and when it comes to compare with bank accounts, its a hassle if the bottom is at the top is at the top because I edited it.
Any you could always provide an options of switching between sorting by creation, and sorting by updated at if you want to maintain the current functionality.
-
Error running cap local externals:setup - 'Readme.txt' would be overwritten by merge
1 comment Created 5 months ago by jjolma$ cap local externals:setup
* executing `local' * executing `externals:setup' configuring vendor/plugins/haml remote: Counting objects: 12496, done. remote: Compressing objects: 100% (4100/4100), done. remote: Total 12496 (delta 8371), reused 12235 (delta 8111) configuring vendor/rails remote: Counting objects: 106035, done. remote: Compressing objects: 100% (23766/23766), done. remote: Total 106035 (delta 82025), reused 104753 (delta 81038) configuring vendor/plugins/calendar_date_select remote: Counting objects: 1332, done. remote: Compressing objects: 100% (640/640), done. remote: Total 1332 (delta 772), reused 973 (delta 570) error: Untracked working tree file 'Readme.txt' would be overwritten by merge. vendor/plugins/cached_externals/recipes/cached_externals.rb:54:in `load': Error checking out 88b7caf to /Users/jolma/depot/shared/externals/vendor/plugins/calendar_date_select/88b7caf7acecf31186661c0efd6bc606cdcc666d (RuntimeError) from vendor/plugins/cached_externals/recipes/cached_externals.rb:41:in `each' from vendor/plugins/cached_externals/recipes/cached_externals.rb:41:in `load' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/configuration/execution.rb:128:in `instance_eval' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/configuration/execution.rb:128:in `invoke_task_directly_without_callbacks' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/configuration/callbacks.rb:27:in `invoke_task_directly' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/configuration/execution.rb:81:in `execute_task' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/configuration/execution.rb:93:in `find_and_execute_task' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/execute.rb:45:in `execute_requested_actions_without_help' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/execute.rb:44:in `each' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/execute.rb:44:in `execute_requested_actions_without_help' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/help.rb:19:in `execute_requested_actions' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/execute.rb:33:in `execute!' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/lib/capistrano/cli/execute.rb:14:in `execute' from /Users/jolma/.gem/ruby/1.8/gems/capistrano-2.5.5/bin/cap:4 from /usr/bin/cap:19:in `load' from /usr/bin/cap:19
$ rails --version
Rails 2.3.2
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.6.0]
$ git --version
git version 1.5.5.1
$ cap --version
Capistrano v2.5.5
$ git log
commit 3797771 Author: Jamis Buck Date: Mon May 25 22:04:55 2009 -0600 update changelog
Comments
I get another "cap local externals:setup" error:
E:\TEMP\bucketwise>cap local externals:setup
* executinglocal' * executingexternals:setup' configuring vendor/plugins/haml
The system cannot find the path specified.
vendor/plugins/cached_externals/recipes/cached_externals.rb:54:in `load': Error
checking out a4f0471 to E:/TEMP/shared/externals/vendor/plugins/haml/a4f0471c5be4640029f6deaca5d6ded45e15725c (RuntimeError)
from vendor/plugins/cached_externals/recipes/cached_externals.rb:41:in `each' from vendor/plugins/cached_externals/recipes/cached_externals.rb:41:in `load' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/configuration/execution.rb:139:in `instance_eval' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/configuration/execution.rb:139:in `invoke_task_directly_without_callbacks' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/configuration/callbacks.rb:27:in `invoke_task_directly' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/configuration/execution.rb:89:in `execute_task' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/configuration/execution.rb:101:in `find_and_execute_task' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/execute.rb:45:in `execute_requested_actions_without_help' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/execute.rb:44:in `each' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/execute.rb:44:in `execute_requested_actions_without_help' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/help.rb:19:in `execute_requested_actions' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/execute.rb:33:in `execute!' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/lib/capistrano/cli/execute.rb:14:in `execute' from d:/Ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.9/bin/cap:4 from d:/Ruby/bin/cap:19:in `load' from d:/Ruby/bin/cap:19E:\TEMP\bucketwise>
-
0 comments Created 5 months ago by jamuraaFeature Request: Bucket Reallocation Commentsfeature-requestxI would really like to have the option to have a comment when I do a bucket reallocation, otherwise sometimes it is easy to forget why I moved money from one bucket to another.
Comments
-
Once you've reconciled a statement, editing any event associated with that statement removes that event from the statement it was reconciled with, silently. This is because editing an event actually creates new line items, rather than trying to just update the existing line items.
Comments











