Giter Club home page Giter Club logo

budget's Introduction

Budget

GitHub latest release Build status codecov GitHub license

Budget is an open-source web application that helps you keep track of your finances.

You can use Budget by hosting it yourself, or using the instance hosted by us.

Product

Features

  • Insertion and management of transactions
  • Ability to organize transactions using tags
  • Facilitate uploading and organizing of receipts
  • Support for importing transactions (CSV format)
  • Reports that visualize financials (showing weekly balance and most expensive tags, for example)
  • Supports multiple currencies
  • Available in multiple languages
  • Weekly summary available through e-mail

Requirements

  • PHP 8.1 or higher
  • HTTP server (for example Apache or NGINX)
  • MySQL
  • Composer
  • Node.js

Installation

  • Clone the repository (git clone https://github.com/range-of-motion/budget.git)
    • You should always check out a tag, since the master branch might not always be stable (git checkout TAG)
  • Install dependencies (composer install --no-dev -o)
  • Run installation command (php artisan budget:install)
  • Configure additional services in .env (database or mail, for example)
  • Run migrations for database (php artisan migrate)
  • Head over to your list of crons (crontab -e) and add * * * * * cd /path-to-budget && php artisan schedule:run >> /dev/null 2>&1

Note that in order for certain features to work properly, the jobs queue needs to be watched. This can be done by either running php artisan queue:work or using Supervisor.

Updating

Use the command below to update to the latest version.

php artisan budget:update

Docker

You can get set-up with Budget using Docker and Docker Compose. The advantage of using Docker Compose is that it will set you up with a MySQL database.

Docker

You can either build the Docker image yourself, or use the ones available on Docker Hub.

Docker Compose

Assuming you already have Docker Compose installed, simply run docker-compose up -d and you're good to go.

Contact

budget's People

Contributors

daniel-leandro avatar dependabot[bot] avatar grakov avatar joemires avatar kevinjaniky avatar lostdesign avatar oliverjkb avatar overlineink avatar pandabehr avatar range-of-motion avatar sasso0101 avatar sebastiaanspeck avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

budget's Issues

Modifying earning will decrease amount by 99%

Expected behavior

The designated earning should be saved and its amount shouldn't be altered.

Current behavior

Upon modifying an earning, its amount will decrease by 99%.

In an attempt to fix the "floating point problem", we save every amount multiplied by 100. I noticed that we don't do that for earnings that are being edited, hence this bug.

Steps to reproduce

Just edit an earning and you'll see 🤷

DuskServiceProvider: It is unsafe to run Dusk in production.

Hi, not sure if its a relevant issue or not, didnt finish installing just yet - but will once i am at home.

composer install on a fresh clone, threw the following error/warning:

» composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 74 installs, 0 updates, 0 removals
  - Installing doctrine/inflector (v1.3.0): Loading from cache
  - Installing doctrine/lexer (v1.0.1): Loading from cache
  - Installing dragonmantank/cron-expression (v2.2.0): Loading from cache
  - Installing erusev/parsedown (1.7.1): Loading from cache
  - Installing vlucas/phpdotenv (v2.5.1): Loading from cache
  - Installing symfony/css-selector (v4.1.4): Loading from cache
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Loading from cache
  - Installing symfony/polyfill-php72 (v1.9.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.9.0): Loading from cache
  - Installing symfony/var-dumper (v4.1.4): Loading from cache
  - Installing symfony/routing (v4.1.4): Loading from cache
  - Installing symfony/process (v4.1.4): Loading from cache
  - Installing symfony/polyfill-ctype (v1.9.0): Loading from cache
  - Installing symfony/http-foundation (v4.1.4): Loading from cache
  - Installing symfony/event-dispatcher (v4.1.4): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v4.1.4): Loading from cache
  - Installing symfony/http-kernel (v4.1.4): Loading from cache
  - Installing symfony/finder (v4.1.4): Loading from cache
  - Installing symfony/console (v4.1.4): Loading from cache
  - Installing egulias/email-validator (2.1.5): Loading from cache
  - Installing swiftmailer/swiftmailer (v6.1.2): Loading from cache
  - Installing paragonie/random_compat (v9.99.99): Loading from cache
  - Installing ramsey/uuid (3.8.0): Loading from cache
  - Installing psr/simple-cache (1.0.1): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/translation (v4.1.4): Loading from cache
  - Installing nesbot/carbon (1.25.0): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing league/flysystem (1.0.46): Loading from cache
  - Installing laravel/framework (v5.6.35): Loading from cache
  - Installing fideloper/proxy (4.0.0): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.4.2): Loading from cache
  - Installing intervention/image (2.4.2): Loading from cache
  - Installing jakub-onderka/php-console-color (0.1): Loading from cache
  - Installing nikic/php-parser (v4.0.3): Loading from cache
  - Installing jakub-onderka/php-console-highlighter (v0.3.2): Loading from cache
  - Installing dnoegel/php-xdg-base-dir (0.1): Loading from cache
  - Installing psy/psysh (v0.9.7): Loading from cache
  - Installing laravel/tinker (v1.0.7): Loading from cache
  - Installing filp/whoops (2.2.0): Loading from cache
  - Installing fzaninotto/faker (v1.8.0): Loading from cache
  - Installing facebook/webdriver (1.6.0): Downloading (100%)
  - Installing laravel/dusk (v4.0.2): Downloading (100%)
  - Installing hamcrest/hamcrest-php (v1.2.2): Downloading (100%)
  - Installing mockery/mockery (0.9.9): Downloading (100%)
  - Installing webmozart/assert (1.3.0): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (4.3.0): Loading from cache
  - Installing phpunit/php-token-stream (3.0.0): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing sebastian/recursion-context (3.0.0): Loading from cache
  - Installing sebastian/object-reflector (1.1.1): Loading from cache
  - Installing sebastian/object-enumerator (3.0.3): Loading from cache
  - Installing sebastian/global-state (2.0.0): Loading from cache
  - Installing sebastian/exporter (3.1.0): Loading from cache
  - Installing sebastian/environment (3.1.0): Loading from cache
  - Installing sebastian/diff (3.0.1): Loading from cache
  - Installing sebastian/comparator (3.0.2): Loading from cache
  - Installing phpunit/php-timer (2.0.0): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing phpunit/php-file-iterator (2.0.1): Loading from cache
  - Installing theseer/tokenizer (1.1.0): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache
  - Installing phpunit/php-code-coverage (6.0.7): Loading from cache
  - Installing doctrine/instantiator (1.1.0): Loading from cache
  - Installing phpspec/prophecy (1.8.0): Loading from cache
  - Installing phar-io/version (2.0.1): Loading from cache
  - Installing phar-io/manifest (1.0.3): Loading from cache
  - Installing myclabs/deep-copy (1.8.1): Loading from cache
  - Installing phpunit/phpunit (7.3.3): Downloading (100%)
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/http-kernel suggests installing symfony/browser-kit ()
symfony/http-kernel suggests installing symfony/config ()
symfony/http-kernel suggests installing symfony/dependency-injection ()
symfony/console suggests installing symfony/lock ()
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses)
swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator andPeclUuidRandomGenerator)
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
symfony/translation suggests installing symfony/config ()
symfony/translation suggests installing symfony/yaml ()
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.6).)
laravel/framework suggests installing ext-pcntl (Required to use all features of the queue worker.)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)
laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (~1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)
laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (~1.0).)
laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (~1.0).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~3.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (~4.0).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (~1.0).)
intervention/image suggests installing ext-imagick (to use Imagick based image processing.)
intervention/image suggests installing intervention/imagecache (Caching extension for the Intervention Image library)
psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :))
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
facebook/webdriver suggests installing ext-SimpleXML (For Firefox profile creation)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover

In DuskServiceProvider.php line 43:

  It is unsafe to run Dusk in production.


Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
  • macOS Mojave

Recurring transactions fail to submit if day is lower than 10 or higher than 28

Actual behaviour

When creating a transaction with the "This is a recurring spending" checkbox checked, submitting the transaction will fail if the day is 01 to 09 or >28.
validator.integer will be displayed under input field for "day".

Expected behaviour:

When creating a transaction with a day lower then 10 or greater than 28, submitting will persist the recurring transaction as a row in the database.

Steps to reproduce:

  • visit /transactions/create
  • enter spending transaction
  • use date with single digit day or greater than 28
  • check "This is a recurring spending" checkbox
  • fill other required inputs
  • submit

Cause

From what I can see, the validation checks for a date that is between:1,28.
This causes two possible scenarios for the validation to fail:

  1. for days from 1 to 9, the date picker will cause the component to send 01 to 09 as input, causing the validator to reject due to incompatibility of 01 and 1, for example.
  2. for days greater than 28 the validator will reject due to the number being higher than the allowed maximum.

Contribution?

I initially wanted to write something myself, but found this gem instead!
This is great work already!
I'd be happy to contribute a fix, in case you'd be interested :)

Decimal precision is inaccurate

Upon creating a new spending, I came across this issue. The amount's decimals are inaccurate. For example–9.70 becomes 9.69.. 🤷

Create console command to run installation commands at once

Hi there. Saw your project while browsing through the larachat projects channel.

Firstly, great work on this project.

I wanted to suggest creating a new command which would compile all of the separate installation commands into once (e.g. php artisan budget:install).

Taking it one step further, prompts (and actions) can be given to making sure users have either npm or yarn on their system before compiling.

Let me know your thoughts on this.

No filetype sanitazation in upload form

Expected behavior

Only being able to upload data formats that make sense to be uploaded, like csv or other table formats

Current behavior

Every single filetype can be uploaded (with constraints on size), this can lead to unexpected behavior and could even be a security risk.

Steps to reproduce

  1. Go to main page and click imports (https://app.budget.pixely.me/imports)
  2. Upload image or other nonsensical data
  3. click next and see nonsensical data in tables

Migrate to GitHub Actions

I got in on the beta of GitHub Actions, should prolly migrate to that. I'll do that myself tho <3

Versioning

Thinking of starting with versioning soon. It's kinda hard to know for an end-user what features and changes they have access to, and I think it'd be good to for example display the version or tag on the "community edition".

Thoughts?

Stop abusing session for mass-storage

This is a follow-up from #118. It looks the session is being abused to store relationships of the selected "space" entity. Stuff like activities, earnings, spendings, etc. I think it's cleaner if we don't rely on the session for that.

TLDR.

- $activities = session('space')->activities()->latest()->get()
+ $activities = $this->activitiesRepository->getBySpaceId(session('space')->id);

Release1

Creación de las bases de datos

.

Creación de las bases de datos

Missing required parameters while trying to create recurring transaction

Steps to reproduce

  1. Try and create a transaction by clicking the button in the navigation bar
  2. Make sure you mark it as a "recurring" transaction
  3. Click "Create"
  4. Shit hits the fan

Here's the output in the log.

[2020-05-13 22:27:19] local.ERROR: Missing required parameters for [Route: recurrings.show] [URI: recurrings/{recurring}]. {"userId":1,"exception":"[object] (Illuminate\Routing\Exceptions\UrlGenerationException(code: 0): Missing required parameters for [Route: recurrings.show] [URI: recurrings/{recurring}]. at removed

Allow recurrings to be an earning

Since salary is usually a recurring earning, but rent is a recurring spending.

My idea, if the amount is negative put it down as a spending.
Which makes a positive amount an earning.

Or you could add a type of recurring, so you dont have to fill out negative amounts ever.

Weekly reports doesn’t match

The weekly report-page seems to show a monthly-report and even has a hardcoded year in it.. If I change it to 2019, the report doesn’t match anymore. Please fix

About components styles.

Hi, can you tell me, please, where did you get style files for this project? Did you do it by yourself?

Recurrings do not create related jobs for queue

Actual behavior

When a recurring transaction is entered, the model will be persisted to the database as intended.
However, no corresponding job will be despatched to the queue, hence recurrings will never be reviewed, breaking the intended use case.
Read: Recurrings will never find their way into the transactions.

Expected behavior

When entering a recurring transaction, two actions should take place:

  • save an instance of recurring database
  • save an instance of job to database

Steps to reproduce

  • Select Create Transaction
  • Choose Spending
  • Tick This is a recurring […]
  • Save

Extended Issue

Unfortunately, adding a ProcessRecurrings::dispatch($recurring); will only in part resolve the issue.
Since a ProcessRecurrings-job will only fire once and will then be removed, there will be next to no Recurrings ever going to find their way to the transactions.

An additional scheduled Task should be created to add a corresponding Job to the queue for every active Recurring in the database every single day.

Transactions with substantial amount mess with graph on dashboard

Expected behavior

Graph on dashboard should accurately display balance over a given amount of days.

Current behavior

Said graph will inaccurately display balance and its line will "flicker" from top to bottom.

Steps to reproduce

  1. Create transaction with a substantial (2k for example) amount
  2. Graph on dashboard should look weird, or not even show at all

image

Integration with Plaid

Plaid is an easy to use API for accessing bank account information securely. It would be awesome if this application integrated with it to automatically import transactions from bank accounts.

History or Order Book

I think Budget need this feature, to track everything happens dialy, view reports, earnings (...) and undo past changes.

Setting for different charts on dashboard

Currently we just show the monthly balance, but would be nice to have options.

  • Daily balance for current month
  • $ spent per category
  • Suggestions? Drop them down below

Insert south american currencies

I'm trying to use in Brazil, but there's not found our currency "Brazilian Real BRL".

I will create a pull request with the main currencies from South American countries.

getTransactionsByYearMonth method broken in PHP 7.4

Expected behavior

The aforementioned method should execute without any errors.

Current behavior

After upgrading to PHP 7.4 (7.3 worked fine), the getTransactionsByYearMonth method in TransactionRepository results in an error.

As far as I'm concerned, this is obvious (since we're trying to access an item inside an array, for a variable that is not an array), but it never gave any issues in prior versions of PHP 🤷

Steps to reproduce

  1. Make sure you're running PHP 7.4
  2. Navigate to the transactions overview in the navigation bar
  3. Voila, there's your error

[2020-05-17 14:27:31] local.ERROR: Trying to access array offset on value of type null {"userId":1,"exception":"[object] (ErrorException(code: 0): Trying to access array offset on value of type null at /Users/daniel/Code/budget/app/Repositories/TransactionRepository.php:35)

CetarCetur

Expected behavior

What should happen?

Current behavior

What's happening right now when trying to perform your desired action?

Steps to reproduce

  1. Go to ABC
  2. Click on XYZ
  3. Explosions and thunderstorms appear

If applicable, screenshots can be added here

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.