The Mia! Accounting Project https://accounting.imacat.idv.tw
Go to file
2023-04-18 07:10:26 +08:00
docs Advanced to version 1.3.3. 2023-04-13 09:56:16 +08:00
src/accounting Removed the account code from the account list with unmatched offsets for mobile screens. 2023-04-18 07:10:26 +08:00
tests Changed the unmatched offsets from a module to a report, and to show both the unapplied original line items and the unmatched offsets instead of only the unmatched offsets, and added the accumulated balance, in order for ease of use. Removed the match information from the unapplied original line item report. Added the currency and period filters to both the unapplied original line item report and unmatched offset reports. 2023-04-18 01:12:04 +08:00
.gitignore Renamed the project from "Mia! Accounting Flask" to "Mia! Accounting". 2023-04-04 18:26:54 +08:00
.readthedocs.yaml Revised the Read the Docs configuration, and removed the redundant requirements.txt for Read the Docs. 2023-04-05 22:01:53 +08:00
LICENSE Added the initial application with the main account list, the pagination, the query, the permission, the localization, the documentation, the test case, and a test demonstration site. 2023-02-03 12:55:33 +08:00
MANIFEST.in Replaced setup.cfg with pyproject.toml for the package settings, and rewrote the packaging rules in MANIFEST.in. 2023-04-05 19:49:52 +08:00
pyproject.toml Advanced to version 1.3.3. 2023-04-13 09:56:16 +08:00
README.rst Revised the documentation in README.rst and intro.rst. 2023-04-11 21:56:49 +08:00

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> </head>

Mia! Accounting

Description

Mia! Accounting is an accounting module for Flask applications. It is designed both for mobile and desktop environments. It implements double-entry bookkeeping. It generates the following accounting reports:

  • Trial balance
  • Income statement
  • Balance sheet

In addition, Mia! Accounting tracks offsets for unpaid payables and receivables.

Live Demonstration and Test Site

There is a live demonstration for Mia! Accounting. It runs the same code as the test site in the source distribution. It is the simplest website that works with Mia! Accounting. It is also used in the automatic tests.

If you do not have a running Flask application or do not know how to start one, you may start with the test site.

Installation

Install Mia! Accounting with pip:

pip install mia-accounting

You may also download from the PyPI project page or the release page on the Git repository.

Prerequisites

You need a running Flask application with database user login. The primary key of the user data model must be integer. You also need at least one user.

The following front-end JavaScript libraries must be loaded. You may download it locally or use CDN.

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, run the accounting-init-db console command to initialize the accounting database. You need to specify the username of a user as the data creator.

% flask --app myapp accounting-init-db -u username

Navigation Menu

Include the navigation menu in the Bootstrap navigation bar in your base template:

<nav class="navbar navbar-expand-lg bg-body-tertiary bg-dark navbar-dark">
  <div class="container-fluid">
    ...
    <div id="collapsible-navbar" class="collapse navbar-collapse">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        ...
        {% include "accounting/include/nav.html" %}
        ...
      </ul>
      ...
    </div>
  </div>
</nav>

Check your Flask application and see how it works.

Documentation

Refer to the documentation on Read the Docs.

Authors

imacat
2023/1/27
</html>