A Flask accounting module.
Project description
Description
Mia! Accounting is an accounting module for Flask applications. It implements double-entry bookkeeping, and generates the following accounting reports:
Trial balance
Income statement
Balance sheet
In addition, Mia! Accounting tracks offsets for unpaid payables and receivables.
Installation
Install Mia! Accounting with pip:
pip install mia-accounting
You may also download the from the PyPI project page or the release page on the Git repository.
Test Site and Live Demonstration
You may find a working example in the test site in the source distribution. It is the simplest website that works with Mia! Accounting. It is used in the automatic tests. It is the same code run for live demonstration.
If you do not have a running Flask application or do not know how to start one, you may start with the test site.
Prerequisites
You need a running Flask application with database user login. The primary key of the user data model must be integer.
The following front-end JavaScript libraries must be loaded. You may download it locally or use CDN.
Bootstrap 5.2.3 or above
FontAwesome 6.2.1 or above
Decimal.js 6.4.3 or above
Tempus-Dominus 6.4.3 or above
Configuration
You need to pass the Flask app and an implementation of UserUtilityInterface to the init_app function. UserUtilityInterface contains everything Mia! Accounting needs.
The following is an example configuration for Mia! Accounting.
from flask import Response, redirect from .auth import current_user() from .modules import User def create_app(test_config=None) -> Flask: app: Flask = Flask(__name__) ... (Configuration of SQLAlchemy, CSRF, Babel_JS, ... etc) ... import accounting class UserUtils(accounting.UserUtilityInterface[User]): def can_view(self) -> bool: return True def can_edit(self) -> bool: return "editor" in current_user().roles def can_admin(self) -> bool: return current_user().is_admin def unauthorized(self) -> Response: return redirect("/login") @property def cls(self) -> t.Type[User]: return User @property def pk_column(self) -> Column: return User.id @property def current_user(self) -> User | None: return current_user() def get_by_username(self, username: str) -> User | None: return User.query.filter(User.username == username).first() def get_pk(self, user: User) -> int: return user.id accounting.init_app(app, UserUtils()) ... (Any other configuration) ... return app
Database Initialization
After the configuration, you need to run flask_sqlalchemy.SQLAlchemy.create_all to create the database tables that Mia! Accounting uses.
Mia! Accounting adds three console commands:
accounting-init-base
accounting-init-accounts
accounting-init-currencies
After database tables are created, run accounting-init-base first, and then the other two commands.
% flask --app myapp accounting-init-base % flask --app myapp accounting-init-accounts % flask --app myapp accounting-init-currencies
Documentation
Refer to the documentation on Read the Docs.
Copyright
Copyright (c) 2023 imacat.
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mia_accounting-1.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e96635fa121f49af1f7749f7e7688b90624f745de2e35a80dcfb2d79011886b7 |
|
MD5 | 602308a7fb5b10603ee656f3f822f478 |
|
BLAKE2b-256 | 1ad8e1f650f4ee44c105a142fd1322df2c4ac91f560b81de41c7220cacc3541a |