Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
86c5b91697 | |||
9168840e64 | |||
21b9cfa8b8 | |||
b0b3b3acb1 |
75
README.rst
75
README.rst
@ -17,46 +17,7 @@ accounting reports:
|
|||||||
In addition, *Mia! Accounting* tracks offsets for unpaid payables and
|
In addition, *Mia! Accounting* tracks offsets for unpaid payables and
|
||||||
receivables.
|
receivables.
|
||||||
|
|
||||||
You may try the `Mia! Accounting live demonstration`_.
|
You may try the `live demonstration`_.
|
||||||
|
|
||||||
|
|
||||||
History
|
|
||||||
=======
|
|
||||||
|
|
||||||
I created my own private accounting application in Perl_/mod_perl_ in
|
|
||||||
2007, as part of my personal website. The first revision was made
|
|
||||||
using Perl/Mojolicious_ in 2019, with the aim of making it
|
|
||||||
mobile-friendly using Bootstrap_, and with modern back-end and
|
|
||||||
front-end technologies such as jQuery.
|
|
||||||
|
|
||||||
The second revision was done in Python_/Django_ in 2020, as I was
|
|
||||||
looking to change my career from PHP_/Laravel_ to Python, but lacked
|
|
||||||
experience with large Python projects. I wanted to add something new
|
|
||||||
to my portfolio and decided to work on the somewhat outdated
|
|
||||||
Mojolicious project.
|
|
||||||
|
|
||||||
Despite having no prior experience with Django, I spent two months
|
|
||||||
working late nights to create the `Mia! Account Django application`_.
|
|
||||||
It took me another 1.5 months to make it an independent module, which
|
|
||||||
I later released as an open source project.
|
|
||||||
|
|
||||||
The application worked nicely for my household bookkeeping for two
|
|
||||||
years. However, new demands arose over time, especially with tracking
|
|
||||||
payables and receivables, which became difficult with credit card
|
|
||||||
payments. This was critical `during the pandemic`_ as more payments
|
|
||||||
were made online with credit cards.
|
|
||||||
|
|
||||||
The biggest issue I encountered was with Django's MVT framework. Due
|
|
||||||
to my lack of experience with Django during development, I ended up
|
|
||||||
with mixed function-based view controllers and class-based views. It
|
|
||||||
became very difficult to track whether problems originated from my
|
|
||||||
overridden methods or not-overridden methods, or from the Django base
|
|
||||||
views themselves. I did not fully understand how everything worked.
|
|
||||||
|
|
||||||
Therefore, I decided to turn to microframeworks like Flask. After
|
|
||||||
working with modularized Flask and FastAPI_ applications for two
|
|
||||||
years, I returned to the project and wrote its third revision using
|
|
||||||
Flask in 2023.
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
@ -91,7 +52,7 @@ Configuration
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
You need to pass the Flask *app* and an implementation of
|
You need to pass the Flask *app* and an implementation of
|
||||||
``UserUtilityInterface`` to the ``init_app`` function.
|
`UserUtilityInterface`_ to the `init_app`_ function.
|
||||||
``UserUtilityInterface`` contains everything *Mia! Accounting* needs.
|
``UserUtilityInterface`` contains everything *Mia! Accounting* needs.
|
||||||
|
|
||||||
The following is an example configuration for *Mia! Accounting*.
|
The following is an example configuration for *Mia! Accounting*.
|
||||||
@ -109,7 +70,7 @@ The following is an example configuration for *Mia! Accounting*.
|
|||||||
|
|
||||||
import accounting
|
import accounting
|
||||||
|
|
||||||
class UserUtilities(accounting.UserUtilityInterface[User]):
|
class UserUtils(accounting.UserUtilityInterface[User]):
|
||||||
|
|
||||||
def can_view(self) -> bool:
|
def can_view(self) -> bool:
|
||||||
return True
|
return True
|
||||||
@ -161,8 +122,8 @@ database tables that *Mia! Accounting* uses.
|
|||||||
* ``accounting-init-accounts``
|
* ``accounting-init-accounts``
|
||||||
* ``accounting-init-currencies``
|
* ``accounting-init-currencies``
|
||||||
|
|
||||||
You need to run ``accounting-init-base`` first, and then the other
|
After database tables are created, run
|
||||||
two commands.
|
``accounting-init-base`` first, and then the other two commands.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -242,29 +203,19 @@ Authors
|
|||||||
|
|
||||||
.. _Flask: https://flask.palletsprojects.com
|
.. _Flask: https://flask.palletsprojects.com
|
||||||
.. _double-entry bookkeeping: https://en.wikipedia.org/wiki/Double-entry_bookkeeping
|
.. _double-entry bookkeeping: https://en.wikipedia.org/wiki/Double-entry_bookkeeping
|
||||||
.. _Mia! Accounting live demonstration: https://accounting.imacat.idv.tw/
|
.. _live demonstration: https://accounting.imacat.idv.tw
|
||||||
.. _Perl: https://www.perl.org
|
|
||||||
.. _mod_perl: https://perl.apache.org
|
|
||||||
.. _Mojolicious: https://mojolicious.org
|
|
||||||
.. _Bootstrap: https://getbootstrap.com
|
|
||||||
.. _jQuery: https://jquery.com
|
|
||||||
.. _Python: https://www.python.org
|
|
||||||
.. _Django: https://www.djangoproject.com
|
|
||||||
.. _PHP: https://www.php.net
|
|
||||||
.. _Laravel: https://laravel.com
|
|
||||||
.. _Mia! Account Django application: https://github.com/imacat/mia-accounting-django
|
|
||||||
.. _during the pandemic: https://en.wikipedia.org/wiki/COVID-19_pandemic
|
|
||||||
.. _FastAPI: https://fastapi.tiangolo.com
|
|
||||||
.. _FontAwesome: https://fontawesome.com
|
|
||||||
.. _Decimal.js: https://mikemcl.github.io/decimal.js
|
|
||||||
.. _Tempus-Dominus: https://getdatepicker.com
|
|
||||||
.. _CDN: https://en.wikipedia.org/wiki/Content_delivery_network
|
|
||||||
.. _PyPI project page: https://pypi.org/project/mia-accounting
|
.. _PyPI project page: https://pypi.org/project/mia-accounting
|
||||||
.. _release page: https://github.com/imacat/mia-accounting/releases
|
.. _release page: https://github.com/imacat/mia-accounting/releases
|
||||||
.. _Git repository: https://github.com/imacat/mia-accounting
|
.. _Git repository: https://github.com/imacat/mia-accounting
|
||||||
|
.. _CDN: https://en.wikipedia.org/wiki/Content_delivery_network
|
||||||
|
.. _Bootstrap: https://getbootstrap.com
|
||||||
|
.. _FontAwesome: https://fontawesome.com
|
||||||
|
.. _Decimal.js: https://mikemcl.github.io/decimal.js
|
||||||
|
.. _Tempus-Dominus: https://getdatepicker.com
|
||||||
|
.. _UserUtilityInterface: https://mia-accounting.readthedocs.io/en/latest/accounting.utils.html#accounting.utils.user.UserUtilityInterface
|
||||||
|
.. _init_app: https://mia-accounting.readthedocs.io/en/latest/accounting.html#accounting.init_app
|
||||||
.. _flask_sqlalchemy.SQLAlchemy.create_all: https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/api/#flask_sqlalchemy.SQLAlchemy.create_all
|
.. _flask_sqlalchemy.SQLAlchemy.create_all: https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/api/#flask_sqlalchemy.SQLAlchemy.create_all
|
||||||
.. _Bootstrap navigation bar: https://getbootstrap.com/docs/5.3/components/navbar/
|
.. _Bootstrap navigation bar: https://getbootstrap.com/docs/5.3/components/navbar/
|
||||||
.. _test site: https://github.com/imacat/mia-accounting/tree/main/tests/test_site
|
.. _test site: https://github.com/imacat/mia-accounting/tree/main/tests/test_site
|
||||||
.. _source distribution: https://pypi.org/project/mia-accounting/#files
|
.. _source distribution: https://pypi.org/project/mia-accounting/#files
|
||||||
.. _live demonstration: https://accounting.imacat.idv.tw
|
|
||||||
.. _documentation on Read the Docs: https://mia-accounting.readthedocs.io
|
.. _documentation on Read the Docs: https://mia-accounting.readthedocs.io
|
||||||
|
@ -13,7 +13,7 @@ sys.path.insert(0, os.path.abspath('../../src/'))
|
|||||||
project = 'Mia! Accounting'
|
project = 'Mia! Accounting'
|
||||||
copyright = '2023, imacat'
|
copyright = '2023, imacat'
|
||||||
author = 'imacat'
|
author = 'imacat'
|
||||||
release = '1.0.0'
|
release = '1.0.1'
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
# -- General configuration ---------------------------------------------------
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
@ -22,7 +22,7 @@ The following is an example configuration for *Mia! Accounting*.
|
|||||||
|
|
||||||
import accounting
|
import accounting
|
||||||
|
|
||||||
class UserUtilities(accounting.UserUtilityInterface[User]):
|
class UserUtils(accounting.UserUtilityInterface[User]):
|
||||||
|
|
||||||
def can_view(self) -> bool:
|
def can_view(self) -> bool:
|
||||||
return True
|
return True
|
||||||
|
57
docs/source/history.rst
Normal file
57
docs/source/history.rst
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
History
|
||||||
|
=======
|
||||||
|
|
||||||
|
I created my own private accounting application in Perl_/mod_perl_ in
|
||||||
|
2007, as part of my personal website. The first revision was made
|
||||||
|
using Perl/Mojolicious_ in 2019, with the aim of making it
|
||||||
|
mobile-friendly using Bootstrap_, and with modern back-end and
|
||||||
|
front-end technologies such as jQuery.
|
||||||
|
|
||||||
|
The second revision was done in Python_/Django_ in 2020, as I was
|
||||||
|
looking to change my career from PHP_/Laravel_ to Python, but lacked
|
||||||
|
experience with large Python projects. I needed something in my
|
||||||
|
portfolio and decided to work on the somewhat outdated Mojolicious
|
||||||
|
project.
|
||||||
|
|
||||||
|
Despite having no prior experience with Django, I spent two months
|
||||||
|
working late nights to create the `Mia! Accounting Django`_
|
||||||
|
application. It took me another 1.5 months to make it an independent
|
||||||
|
module, which I later released as an open source project on PyPI.
|
||||||
|
|
||||||
|
The application worked nicely for my household bookkeeping for two
|
||||||
|
years. However, new demands arose over time, especially with tracking
|
||||||
|
payables and receivables. This was critical `during the pandemic`_ as
|
||||||
|
more payments were made online with credit cards.
|
||||||
|
|
||||||
|
The biggest issue I encountered was with
|
||||||
|
`Django's MTV architectural pattern`_. Django takes over the control
|
||||||
|
flow. I had to override several parts of the `class-based views`_ for
|
||||||
|
different but yet simple control flow logic. In the end, it became
|
||||||
|
very difficult to track whether things went wrong because I overrode
|
||||||
|
something or because it just wouldn't work with the basic assumption
|
||||||
|
of the class-based views. By the time I realized it, it was too late
|
||||||
|
for me to drop Django's MTV and rewrite everything from class-based
|
||||||
|
views to function-based views.
|
||||||
|
|
||||||
|
Therefore, I decided to turn to microframeworks_ like Flask_. After
|
||||||
|
working with modularized Flask and FastAPI_ applications for two
|
||||||
|
years, I returned to the project and wrote its third revision using
|
||||||
|
Flask in 2023.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Perl: https://www.perl.org
|
||||||
|
.. _mod_perl: https://perl.apache.org
|
||||||
|
.. _Mojolicious: https://mojolicious.org
|
||||||
|
.. _Bootstrap: https://getbootstrap.com
|
||||||
|
.. _jQuery: https://jquery.com
|
||||||
|
.. _Python: https://www.python.org
|
||||||
|
.. _Django: https://www.djangoproject.com
|
||||||
|
.. _PHP: https://www.php.net
|
||||||
|
.. _Laravel: https://laravel.com
|
||||||
|
.. _Mia! Accounting Django: https://github.com/imacat/mia-accounting-django
|
||||||
|
.. _during the pandemic: https://en.wikipedia.org/wiki/COVID-19_pandemic
|
||||||
|
.. _FastAPI: https://fastapi.tiangolo.com
|
||||||
|
.. _Django's MTV architectural pattern: https://docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names
|
||||||
|
.. _class-based views: https://docs.djangoproject.com/en/4.2/topics/class-based-views/
|
||||||
|
.. _microframeworks: https://en.wikipedia.org/wiki/Microframework
|
||||||
|
.. _Flask: https://flask.palletsprojects.com
|
@ -13,6 +13,7 @@ Welcome to Mia! Accounting's documentation!
|
|||||||
intro
|
intro
|
||||||
accounting
|
accounting
|
||||||
examples
|
examples
|
||||||
|
history
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,46 +12,7 @@ accounting reports:
|
|||||||
In addition, *Mia! Accounting* tracks offsets for unpaid payables and
|
In addition, *Mia! Accounting* tracks offsets for unpaid payables and
|
||||||
receivables.
|
receivables.
|
||||||
|
|
||||||
You may try the `Mia! Accounting live demonstration`_.
|
You may try the `live demonstration`_.
|
||||||
|
|
||||||
|
|
||||||
History
|
|
||||||
-------
|
|
||||||
|
|
||||||
I created my own private accounting application in Perl_/mod_perl_ in
|
|
||||||
2007, as part of my personal website. The first revision was made
|
|
||||||
using Perl/Mojolicious_ in 2019, with the aim of making it
|
|
||||||
mobile-friendly using Bootstrap_, and with modern back-end and
|
|
||||||
front-end technologies such as jQuery.
|
|
||||||
|
|
||||||
The second revision was done in Python_/Django_ in 2020, as I was
|
|
||||||
looking to change my career from PHP_/Laravel_ to Python, but lacked
|
|
||||||
experience with large Python projects. I wanted to add something new
|
|
||||||
to my portfolio and decided to work on the somewhat outdated
|
|
||||||
Mojolicious project.
|
|
||||||
|
|
||||||
Despite having no prior experience with Django, I spent two months
|
|
||||||
working late nights to create the `Mia! Account Django application`_.
|
|
||||||
It took me another 1.5 months to make it an independent module, which
|
|
||||||
I later released as an open source project.
|
|
||||||
|
|
||||||
The application worked nicely for my household bookkeeping for two
|
|
||||||
years. However, new demands arose over time, especially with tracking
|
|
||||||
payables and receivables, which became difficult with credit card
|
|
||||||
payments. This was critical `during the pandemic`_ as more payments
|
|
||||||
were made online with credit cards.
|
|
||||||
|
|
||||||
The biggest issue I encountered was with Django's MVT framework. Due
|
|
||||||
to my lack of experience with Django during development, I ended up
|
|
||||||
with mixed function-based view controllers and class-based views. It
|
|
||||||
became very difficult to track whether problems originated from my
|
|
||||||
overridden methods or not-overridden methods, or from the Django base
|
|
||||||
views themselves. I did not fully understand how everything worked.
|
|
||||||
|
|
||||||
Therefore, I decided to turn to microframeworks like Flask. After
|
|
||||||
working with modularized Flask and FastAPI_ applications for two
|
|
||||||
years, I returned to the project and wrote its third revision using
|
|
||||||
Flask in 2023.
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
@ -97,7 +58,7 @@ Database Initialization
|
|||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
After the configuration, you need to run
|
After the configuration, you need to run
|
||||||
:py:meth:`flask_sqlalchemy.SQLAlchemy.create_all` to create the
|
`flask_sqlalchemy.SQLAlchemy.create_all`_ to create the
|
||||||
database tables that *Mia! Accounting* uses.
|
database tables that *Mia! Accounting* uses.
|
||||||
|
|
||||||
*Mia! Accounting* adds three console commands:
|
*Mia! Accounting* adds three console commands:
|
||||||
@ -106,8 +67,8 @@ database tables that *Mia! Accounting* uses.
|
|||||||
* ``accounting-init-accounts``
|
* ``accounting-init-accounts``
|
||||||
* ``accounting-init-currencies``
|
* ``accounting-init-currencies``
|
||||||
|
|
||||||
You need to run ``accounting-init-base`` first, and then the other
|
After database tables are created, run
|
||||||
two commands.
|
``accounting-init-base`` first, and then the other two commands.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -161,28 +122,17 @@ Refer to the `documentation on Read the Docs`_.
|
|||||||
|
|
||||||
.. _Flask: https://flask.palletsprojects.com
|
.. _Flask: https://flask.palletsprojects.com
|
||||||
.. _double-entry bookkeeping: https://en.wikipedia.org/wiki/Double-entry_bookkeeping
|
.. _double-entry bookkeeping: https://en.wikipedia.org/wiki/Double-entry_bookkeeping
|
||||||
.. _Mia! Accounting live demonstration: https://accounting.imacat.idv.tw/
|
.. _live demonstration: https://accounting.imacat.idv.tw
|
||||||
.. _Perl: https://www.perl.org
|
|
||||||
.. _mod_perl: https://perl.apache.org
|
|
||||||
.. _Mojolicious: https://mojolicious.org
|
|
||||||
.. _Bootstrap: https://getbootstrap.com
|
|
||||||
.. _jQuery: https://jquery.com
|
|
||||||
.. _Python: https://www.python.org
|
|
||||||
.. _Django: https://www.djangoproject.com
|
|
||||||
.. _PHP: https://www.php.net
|
|
||||||
.. _Laravel: https://laravel.com
|
|
||||||
.. _Mia! Account Django application: https://github.com/imacat/mia-accounting-django
|
|
||||||
.. _during the pandemic: https://en.wikipedia.org/wiki/COVID-19_pandemic
|
|
||||||
.. _FastAPI: https://fastapi.tiangolo.com
|
|
||||||
.. _FontAwesome: https://fontawesome.com
|
|
||||||
.. _Decimal.js: https://mikemcl.github.io/decimal.js
|
|
||||||
.. _Tempus-Dominus: https://getdatepicker.com
|
|
||||||
.. _CDN: https://en.wikipedia.org/wiki/Content_delivery_network
|
|
||||||
.. _PyPI project page: https://pypi.org/project/mia-accounting
|
.. _PyPI project page: https://pypi.org/project/mia-accounting
|
||||||
.. _release page: https://github.com/imacat/mia-accounting/releases
|
.. _release page: https://github.com/imacat/mia-accounting/releases
|
||||||
.. _Git repository: https://github.com/imacat/mia-accounting
|
.. _Git repository: https://github.com/imacat/mia-accounting
|
||||||
|
.. _CDN: https://en.wikipedia.org/wiki/Content_delivery_network
|
||||||
|
.. _Bootstrap: https://getbootstrap.com
|
||||||
|
.. _FontAwesome: https://fontawesome.com
|
||||||
|
.. _Decimal.js: https://mikemcl.github.io/decimal.js
|
||||||
|
.. _Tempus-Dominus: https://getdatepicker.com
|
||||||
|
.. _flask_sqlalchemy.SQLAlchemy.create_all: https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/api/#flask_sqlalchemy.SQLAlchemy.create_all
|
||||||
.. _Bootstrap navigation bar: https://getbootstrap.com/docs/5.3/components/navbar/
|
.. _Bootstrap navigation bar: https://getbootstrap.com/docs/5.3/components/navbar/
|
||||||
.. _test site: https://github.com/imacat/mia-accounting/tree/main/tests/test_site
|
.. _test site: https://github.com/imacat/mia-accounting/tree/main/tests/test_site
|
||||||
.. _source distribution: https://pypi.org/project/mia-accounting/#files
|
.. _source distribution: https://pypi.org/project/mia-accounting/#files
|
||||||
.. _live demonstration: https://accounting.imacat.idv.tw
|
|
||||||
.. _documentation on Read the Docs: https://mia-accounting.readthedocs.io
|
.. _documentation on Read the Docs: https://mia-accounting.readthedocs.io
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "mia-accounting"
|
name = "mia-accounting"
|
||||||
version = "1.0.0"
|
version = "1.0.1"
|
||||||
description = "A Flask accounting module."
|
description = "A Flask accounting module."
|
||||||
readme = "README.rst"
|
readme = "README.rst"
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
|
Reference in New Issue
Block a user