jankeromnes / Compotes

[In development] A small app to manage bank account operations and display rich analytics. Demo app credentials are admin/admin.

Home Page:https://compotes.piers.tech/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐ŸŽ Compotes ๐Ÿ

A WIP application to view bank operations.

This is meant to be used locally, for your local machine, not online. That would be quite unfortunate to view all your bank operations in a row.

๐Ÿงฎ

Contribute

If you want to contribute, you can directly go to the Roadmap, there are TONS of things you can do.

Some of them are really straightforward!

Install

This is a PHP/Symfony project, so:

  • Make sure you have a working PHP 7.4 setup.
  • Download the Symfony CLI on symfony.com/download if you do not have it yet, and make sure it is accessible globally.
  • Make sure you have Docker installed and accessible globally, as well as Docker Compose.

    Note: if you do not want to use Docker, then you need a MySQL server and you must change the DATABASE_URL value in .env.local to point it to your running server.

  • Make sure you have Node.js installed and accessible globally, as well as npm, for frontend assets.
  • Run make install to install the dependencies (if you do not use Docker, check the Makefile to know what commands to execute).
  • That's it, it's running! Go to https://127.0.0.1:8000, default credentials are admin/admin.

For any further question on how to customize the setup, feel free to run make to list all available commands, or directly check the Makefile itself.

Operations

Bank operations can be imported from files via this command:

$ php bin/console operations:import

Here are the requirements:

  • Files must be stored in the account_exports/ directory at the project's root.
  • File format must be CSV.
  • File name must be {year}-{month}.csv.
  • First line of the file will be ignored, so it can contain headers or an empty line.
  • Each line column must be the following, in this order:
    1. Date in d/m/Y format (nothing else supported for now).
    2. Operation type (given by bank provider, can be an empty string).
    3. Display type (not mandatory, can be an empty string).
    4. Operation details (can be a longer string).
    5. Amount of the operation. Can be a negative number.

      Note that this can be a string like 1 234,55 or 1,234.55. Every non-digit character (except + and -) will be removed and all remaining numbers will make the amount in cents. Do not store floats to avoid floating point issues (read this link, if you need to know why you should avoid storing floats).

Set up the administration panel

The default username for the admin panel is admin, but you can change it by overriding the ADMIN_USER environment variable in your .env.local file.

If you want to change the password, there's a make recipe in the [Makefile][./Makefile] to do so, all you need to do is run make admin-password by injecting the password you want as an environment variable, like this:

$ make -e DEFAULT_ADMIN_PASSWORD=yourpassword admin-password
[PHP] Overwrite existing password in ".env.local"

The password will be saved inside an .env.local file at the root of the project, which may look like this:

# .env.local

# Or anything else you like, not mandatory since the default value is "admin".
ADMIN_USER=admin

# Set to "admin" by default, but could be overriden to anything you like with the "make admin-password" recipe.
ADMIN_PASSWORD='$argon2id$v=19$m=65536,t=4,p=1$N0R4Zi5hUWQ3QXB0bjVGdg$VsVcHzGRfGPlEbLo/JK0M4S0QT5Mx7wd+vbwXanjpb8'

Important note: do not forget to add single quotes ' around the hashed password, else the $ sign will cause issues (or you can also escape it with \$ instead of $).

Roadmap/TODO list

Feel free to contribute ๐Ÿ˜‰.

  • Make many analytics dashboards (that's what this app is for in the first place, probably with Highcharts).
  • Support JS closures in Chart objects (by using a placeholder to remove quotes maybe?).
  • Add a lot of fixtures to play with.
  • Add translations for tags (maybe using an extension like gedmo or knp?).
  • Implement more source file types like xls, ods, etc., that could be transformed to CSV before importing them. PHPSpreadsheet is already installed, though not used yet.
  • Custom source file format (only CSV for now, and that's perfectly fine for me).
  • Change CSV headers at runtime (could be done with a command-line InputOption::VALUE_IS_ARRAY option, something like bin/console operations:import --header=Account --header=Amount --header=Label etc.).
  • Change CSV delimiter/enclosure at runtime (could be done with command-line options).
  • Change input operation date format (for now it's d/m/Y as of French date format).
  • Multiple bank accounts (needs to migrate all existing data to a "default" account create via migration).
  • Operation currency (a single header, maybe a default value in the importer and the command too).
  • Add tests.
  • Support for Bills (a Bill object and a BillItem one, and maybe associate a Bill with one or more Operation objects with a OneToMany relationship so multiple operations can associate with one bill).
  • Support for "sub-operations" (to allow cutting an operation in multiple sub-operations so we can get the "details" of an operation, each sub-operation should also be able to be tagged).
  • Imagine a support for Sylius bundles?

โœ”๏ธ Done already:

  • Operation tags (insurance, internet provider, car loan, etc.). Multiple tags per operation.
  • Demo app at https://piers.ovh/compotes/ with credentials admin/admin and database reset every day.
  • Added default tags (in French only for now).
  • Docker setup with Compose.
  • Added tons of other commands to the Makefile.
  • Made a first PoC for the analytics dashboard.

License

Project is developed under AGPL-3.0 license. Check the LICENSE file for more information.


๐ŸŽ๐Ÿฅ๐Ÿ

About

[In development] A small app to manage bank account operations and display rich analytics. Demo app credentials are admin/admin.

https://compotes.piers.tech/

License:GNU Affero General Public License v3.0


Languages

Language:PHP 86.6%Language:Makefile 6.3%Language:HTML 3.3%Language:JavaScript 3.1%Language:Shell 0.5%Language:Dockerfile 0.1%Language:CSS 0.0%