django-ledger 0.8.1__tar.gz → 0.8.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of django-ledger might be problematic. Click here for more details.
- {django_ledger-0.8.1/django_ledger.egg-info → django_ledger-0.8.2.1}/PKG-INFO +1 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/__init__.py +1 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/data_import.py +2 -3
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/chart_of_accounts.py +160 -169
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/mixins.py +0 -2
- django_ledger-0.8.2.1/django_ledger/static/django_ledger/bundle/djetler.bundle.js +2 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +1 -13
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_update.html +1 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/invoice_update.html +1 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/layouts/base.html +2 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1/django_ledger.egg-info}/PKG-INFO +1 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger.egg-info/SOURCES.txt +0 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/pyproject.toml +3 -3
- django_ledger-0.8.1/django_ledger/static/django_ledger/bundle/djetler.bundle.js +0 -2
- django_ledger-0.8.1/django_ledger/static/django_ledger/bundle/styles.bundle.js +0 -1
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/AUTHORS.md +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/LICENSE +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/MANIFEST.in +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/README.md +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/admin/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/admin/chart_of_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/admin/entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/admin/ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/apps.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/context.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/contrib/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/exceptions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/app_filters.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/auth.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/bank_account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/bill.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/chart_of_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/closing_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/customer.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/estimate.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/feedback.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/invoice.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/item.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/journal_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/purchase_order.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/transactions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/unit.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/utils.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/forms/vendor.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/io_context.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/io_core.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/io_generator.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/io_library.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/io_middleware.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/ofx.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/ratios.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/io/roles.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/management/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/management/commands/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/management/commands/generate_oauth2_codes.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0001_initial.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0002_alter_journalentrymodel_managers_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0003_remove_accountmodel_django_ledg_role_1bff96_idx_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0004_remove_itemmodel_depth_remove_itemmodel_numchild_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0005_remove_itemmodel_django_ledg_invento_dbf206_idx_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0006_alter_journalentrymodel_je_number_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0007_remove_customermodel_django_ledg_custome_16f95a_idx_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0008_closingentrymodel_closingentrytransactionmodel_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0009_delete_stagedtransactionmodel.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0010_delete_importjobmodel.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0011_importjobmodel_alter_accountmodel_role_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0012_stagedtransactionmodel_activity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0013_stagedtransactionmodel_bundle_split.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0016_remove_accountmodel_django_ledg_coa_mod_e19964_idx_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0017_alter_accountmodel_unique_together_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0018_transactionmodel_cleared_transactionmodel_reconciled_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0019_alter_transactionmodel_amount_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0023_customermodel_customer_code_customermodel_picture_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/migrations/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/bank_account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/bill.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/closing_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/coa_default.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/customer.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/data_import.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/deprecations.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/estimate.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/invoice.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/items.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/journal_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/purchase_order.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/receipt.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/schemas/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/schemas/digest.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/schemas/net_payable.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/schemas/net_receivable.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/schemas/pnl.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/signals.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/transactions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/unit.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/utils.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/models/vendor.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/report/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/report/balance_sheet.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/report/cash_flow_statement.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/report/core.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/report/income_statement.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/settings.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/css/djl_styles.css +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/img/daniel-weiss-aj2Os9mYgJU-unsplash.jpg +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/img/made-with-bulma.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo-report.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@4x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@4x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@4x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-text.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-text@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-text@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/django-ledger-text@4x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo/favicon.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-logo@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@0.5x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@2x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@3x.png +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/account_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/account_create_child.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/account_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/account_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/account_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/tags/account_txs_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/account/tags/accounts_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/auth/login.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bank_account/bank_account_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bank_account/bank_account_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bank_account/bank_account_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/bill_void.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/includes/card_bill.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/bills/tags/bill_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/chart_of_accounts/includes/coa_card.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/includes/card_closing_entry.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_txs_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/activity_form.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/breadcrumbs.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/chart_container.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/date_picker.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/default_entity.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/feedback_button.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/filters.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/icon.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/menu.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/modals.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/modals_v2.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/components/period_navigator.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/customer_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/customer_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/customer_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/customer_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/includes/card_customer.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/customer/tags/customer_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/data_import_job_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/data_import_job_txs.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/import_job_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/import_job_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/import_job_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/entitiy_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/entity_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/entity_dashboard.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/entity_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/entity_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/home.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/entity/includes/card_entity.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/estimate_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/estimate_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/estimate_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/estimate_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/includes/card_estimate.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_item_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/estimate/tags/ce_item_formset.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/expense/expense_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/expense/expense_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/expense/expense_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/expense/tags/expense_item_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/cash_flow.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/income_statement.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/breadcrumbs.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/card_markdown.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/footer.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/messages.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/nav.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/page_header.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/widget_bs.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/widget_ic.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/includes/widget_ratios.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/inventory_item_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/inventory_item_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/inventory_item_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/inventory_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/inventory_recount.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_item_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/invoice_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/invoice_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/invoice_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/invoice_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_detail_txs.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/je_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/layouts/content_layout_1.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/layouts/content_layout_2.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/ledger/ledger_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/ledger/ledger_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/ledger/ledger_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/ledger/ledger_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/ledger/tags/ledgers_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/product/product_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/product/product_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/product/product_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/product/product_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/product/tags/product_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_item_formset.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/po_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/po_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/po_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/po_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/po_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/purchase_order/tags/po_item_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/receipt/receipt_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/receipt/receipt_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/receipt/receipt_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/service/service_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/service/service_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/service/service_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/service/service_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/service/tags/services_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/transactions/tags/txs_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/unit/unit_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/unit/unit_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/unit/unit_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/unit/unit_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/uom/tags/uom_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/uom/uom_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/uom/uom_delete.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/uom/uom_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/uom/uom_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/includes/card_vendor.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/vendor_create.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/vendor_detail.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/vendor_list.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templates/django_ledger/vendor/vendor_update.html +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templatetags/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/templatetags/django_ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/base.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/bdd/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/bdd/features/steps/README.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_auth.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_bill.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_chart_of_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_closing_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_io.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_io_ofx/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_io_ofx/tests.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_purchase_order.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/tests/test_transactions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/auth.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/bank_account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/bill.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/chart_of_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/closing_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/customer.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/data_import.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/djl_api.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/estimate.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/feedback.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/financial_statement.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/home.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/inventory.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/invoice.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/item.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/journal_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/purchase_order.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/receipt.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/transactions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/unit.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/urls/vendor.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/utils.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/__init__.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/auth.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/bank_account.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/bill.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/chart_of_accounts.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/closing_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/customer.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/data_import.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/djl_api.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/entity.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/estimate.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/feedback.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/financial_statement.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/home.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/inventory.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/invoice.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/item.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/journal_entry.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/ledger.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/mixins.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/purchase_order.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/receipt.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/transactions.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/unit.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger/views/vendor.py +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger.egg-info/dependency_links.txt +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger.egg-info/requires.txt +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/django_ledger.egg-info/top_level.txt +0 -0
- {django_ledger-0.8.1 → django_ledger-0.8.2.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.8.1
|
|
3
|
+
Version: 0.8.2.1
|
|
4
4
|
Summary: Double entry accounting system built on the Django Web Framework.
|
|
5
5
|
Author-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
6
6
|
Maintainer-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
@@ -6,7 +6,7 @@ Copyright© EDMA Group Inc licensed under the GPLv3 Agreement.
|
|
|
6
6
|
default_app_config = 'django_ledger.apps.DjangoLedgerConfig'
|
|
7
7
|
|
|
8
8
|
"""Django Ledger"""
|
|
9
|
-
__version__ = '0.8.1'
|
|
9
|
+
__version__ = '0.8.2.1'
|
|
10
10
|
__license__ = 'GPLv3 License'
|
|
11
11
|
|
|
12
12
|
__author__ = 'Miguel Sanda'
|
|
@@ -281,9 +281,8 @@ class BaseStagedTransactionModelFormSet(BaseModelFormSet):
|
|
|
281
281
|
]
|
|
282
282
|
|
|
283
283
|
self.unit_model_qs = entity_model.entityunitmodel_set.all()
|
|
284
|
-
self.UNIT_MODEL_CHOICES = [
|
|
285
|
-
(u.uuid, u)
|
|
286
|
-
for i, u in enumerate(self.unit_model_qs)
|
|
284
|
+
self.UNIT_MODEL_CHOICES = [(None, '----')] + [
|
|
285
|
+
(u.uuid, u) for i, u in enumerate(self.unit_model_qs)
|
|
287
286
|
]
|
|
288
287
|
|
|
289
288
|
self.VENDOR_MODEL_QS = entity_model.vendormodel_set.visible()
|
|
@@ -39,13 +39,13 @@ roles to create comprehensive financial statements.
|
|
|
39
39
|
This structure ensures a clear and organized approach to financial management within Django Ledger, facilitating
|
|
40
40
|
accurate record-keeping and reporting.
|
|
41
41
|
"""
|
|
42
|
+
|
|
42
43
|
import warnings
|
|
43
44
|
from random import choices
|
|
44
45
|
from string import ascii_lowercase, digits
|
|
45
46
|
from typing import Optional, Union, Dict
|
|
46
47
|
from uuid import uuid4, UUID
|
|
47
48
|
|
|
48
|
-
from django.apps import apps
|
|
49
49
|
from django.contrib.auth import get_user_model
|
|
50
50
|
from django.core.exceptions import ValidationError
|
|
51
51
|
from django.db import models
|
|
@@ -56,9 +56,16 @@ from django.urls import reverse
|
|
|
56
56
|
from django.utils.translation import gettext_lazy as _
|
|
57
57
|
|
|
58
58
|
from django_ledger.io import (
|
|
59
|
-
ROOT_COA,
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
ROOT_COA,
|
|
60
|
+
ROOT_GROUP_LEVEL_2,
|
|
61
|
+
ROOT_GROUP_META,
|
|
62
|
+
ROOT_ASSETS,
|
|
63
|
+
ROOT_LIABILITIES,
|
|
64
|
+
ROOT_CAPITAL,
|
|
65
|
+
ROOT_INCOME,
|
|
66
|
+
ROOT_COGS,
|
|
67
|
+
ROOT_EXPENSES,
|
|
68
|
+
ROOT_GROUP,
|
|
62
69
|
)
|
|
63
70
|
from django_ledger.models import lazy_loader
|
|
64
71
|
from django_ledger.models.accounts import AccountModel, AccountModelQuerySet
|
|
@@ -70,15 +77,12 @@ UserModel = get_user_model()
|
|
|
70
77
|
|
|
71
78
|
SLUG_SUFFIX = ascii_lowercase + digits
|
|
72
79
|
|
|
73
|
-
app_config = apps.get_app_config('django_ledger')
|
|
74
|
-
|
|
75
80
|
|
|
76
81
|
class ChartOfAccountsModelValidationError(ValidationError):
|
|
77
82
|
pass
|
|
78
83
|
|
|
79
84
|
|
|
80
85
|
class ChartOfAccountModelQuerySet(QuerySet):
|
|
81
|
-
|
|
82
86
|
def active(self) -> 'ChartOfAccountModelQuerySet':
|
|
83
87
|
"""
|
|
84
88
|
QuerySet method to retrieve active items.
|
|
@@ -113,10 +117,7 @@ class ChartOfAccountModelQuerySet(QuerySet):
|
|
|
113
117
|
return self
|
|
114
118
|
|
|
115
119
|
return self.filter(
|
|
116
|
-
(
|
|
117
|
-
Q(entity__admin=user_model) |
|
|
118
|
-
Q(entity__managers__in=[user_model])
|
|
119
|
-
)
|
|
120
|
+
(Q(entity__admin=user_model) | Q(entity__managers__in=[user_model]))
|
|
120
121
|
)
|
|
121
122
|
|
|
122
123
|
|
|
@@ -128,49 +129,56 @@ class ChartOfAccountModelManager(Manager):
|
|
|
128
129
|
|
|
129
130
|
def get_queryset(self) -> ChartOfAccountModelQuerySet:
|
|
130
131
|
qs = ChartOfAccountModelQuerySet(self.model, using=self._db)
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
),
|
|
153
|
-
accountmodel_rootgroup_roles__distinct_count=Count(
|
|
154
|
-
'accountmodel__role',
|
|
155
|
-
filter=Q(accountmodel__role__in=ROOT_GROUP_META),
|
|
156
|
-
distinct=True
|
|
157
|
-
),
|
|
158
|
-
).annotate(
|
|
159
|
-
configured=models.Case(
|
|
160
|
-
models.When(
|
|
161
|
-
Q(accountmodel_rootgroup__count__gte=1) &
|
|
162
|
-
Q(accountmodel_rootgroup__count=F('accountmodel_rootgroup_roles__distinct_count')),
|
|
163
|
-
then=Value(True, output_field=BooleanField()),
|
|
132
|
+
return (
|
|
133
|
+
qs.annotate(
|
|
134
|
+
_entity_slug=F('entity__slug'),
|
|
135
|
+
accountmodel_total__count=Count(
|
|
136
|
+
'accountmodel',
|
|
137
|
+
# excludes coa root accounts...
|
|
138
|
+
filter=Q(accountmodel__depth__gt=2),
|
|
139
|
+
),
|
|
140
|
+
accountmodel_locked__count=Count(
|
|
141
|
+
'accountmodel',
|
|
142
|
+
# excludes coa root accounts...
|
|
143
|
+
filter=Q(accountmodel__depth__gt=2) & Q(accountmodel__locked=True),
|
|
144
|
+
),
|
|
145
|
+
accountmodel_active__count=Count(
|
|
146
|
+
'accountmodel',
|
|
147
|
+
# excludes coa root accounts...
|
|
148
|
+
filter=Q(accountmodel__depth__gt=2) & Q(accountmodel__active=True),
|
|
149
|
+
),
|
|
150
|
+
# Root-group presence and uniqueness checks:
|
|
151
|
+
accountmodel_rootgroup__count=Count(
|
|
152
|
+
'accountmodel', filter=Q(accountmodel__role__in=ROOT_GROUP)
|
|
164
153
|
),
|
|
165
|
-
|
|
166
|
-
|
|
154
|
+
accountmodel_rootgroup_roles__distinct_count=Count(
|
|
155
|
+
'accountmodel__role',
|
|
156
|
+
filter=Q(accountmodel__role__in=ROOT_GROUP_META),
|
|
157
|
+
distinct=True,
|
|
158
|
+
),
|
|
159
|
+
)
|
|
160
|
+
.annotate(
|
|
161
|
+
configured=models.Case(
|
|
162
|
+
models.When(
|
|
163
|
+
Q(accountmodel_rootgroup__count__gte=1)
|
|
164
|
+
& Q(
|
|
165
|
+
accountmodel_rootgroup__count=F(
|
|
166
|
+
'accountmodel_rootgroup_roles__distinct_count'
|
|
167
|
+
)
|
|
168
|
+
),
|
|
169
|
+
then=Value(True, output_field=BooleanField()),
|
|
170
|
+
),
|
|
171
|
+
default=Value(False, output_field=BooleanField()),
|
|
172
|
+
output_field=BooleanField(),
|
|
173
|
+
)
|
|
167
174
|
)
|
|
168
|
-
|
|
175
|
+
.select_related('entity')
|
|
176
|
+
)
|
|
169
177
|
|
|
170
178
|
@deprecated_entity_slug_behavior
|
|
171
|
-
def for_entity(
|
|
172
|
-
|
|
173
|
-
|
|
179
|
+
def for_entity(
|
|
180
|
+
self, entity_model: 'Union[EntityModel | str | UUID]' = None, **kwargs
|
|
181
|
+
) -> ChartOfAccountModelQuerySet:
|
|
174
182
|
"""
|
|
175
183
|
Fetches a QuerySet of ChartOfAccountsModel associated with a specific EntityModel & UserModel.
|
|
176
184
|
May pass an instance of EntityModel or a String representing the EntityModel slug.
|
|
@@ -195,7 +203,7 @@ class ChartOfAccountModelManager(Manager):
|
|
|
195
203
|
'user_model parameter is deprecated and will be removed in a future release. '
|
|
196
204
|
'Use for_user(user_model).for_entity(entity_model) instead to keep current behavior.',
|
|
197
205
|
DeprecationWarning,
|
|
198
|
-
stacklevel=2
|
|
206
|
+
stacklevel=2,
|
|
199
207
|
)
|
|
200
208
|
if DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR:
|
|
201
209
|
qs = qs.for_user(kwargs['user_model'])
|
|
@@ -232,21 +240,23 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
232
240
|
"""
|
|
233
241
|
|
|
234
242
|
uuid = models.UUIDField(default=uuid4, editable=False, primary_key=True)
|
|
235
|
-
entity = models.ForeignKey(
|
|
236
|
-
|
|
237
|
-
|
|
243
|
+
entity = models.ForeignKey(
|
|
244
|
+
'django_ledger.EntityModel', verbose_name=_('Entity'), on_delete=models.CASCADE
|
|
245
|
+
)
|
|
238
246
|
active = models.BooleanField(default=True, verbose_name=_('Is Active'))
|
|
239
|
-
description = models.TextField(
|
|
240
|
-
|
|
247
|
+
description = models.TextField(
|
|
248
|
+
verbose_name=_('CoA Description'), null=True, blank=True
|
|
249
|
+
)
|
|
250
|
+
objects = ChartOfAccountModelManager.from_queryset(
|
|
251
|
+
queryset_class=ChartOfAccountModelQuerySet
|
|
252
|
+
)()
|
|
241
253
|
|
|
242
254
|
class Meta:
|
|
243
255
|
abstract = True
|
|
244
256
|
ordering = ['-created']
|
|
245
257
|
verbose_name = _('Chart of Account')
|
|
246
258
|
verbose_name_plural = _('Chart of Accounts')
|
|
247
|
-
indexes = [
|
|
248
|
-
models.Index(fields=['entity'])
|
|
249
|
-
]
|
|
259
|
+
indexes = [models.Index(fields=['entity'])]
|
|
250
260
|
|
|
251
261
|
def __str__(self):
|
|
252
262
|
if self.name is not None:
|
|
@@ -265,7 +275,7 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
265
275
|
return getattr(self, 'configured')
|
|
266
276
|
except AttributeError:
|
|
267
277
|
pass
|
|
268
|
-
account_qs = self.accountmodel_set.filter(role__in=
|
|
278
|
+
account_qs = self.accountmodel_set.filter(role__in=ROOT_GROUP)
|
|
269
279
|
self.configured = len(account_qs) == len(ROOT_GROUP)
|
|
270
280
|
return self.configured
|
|
271
281
|
|
|
@@ -289,7 +299,9 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
289
299
|
|
|
290
300
|
if len(existing_root_roles) > 0:
|
|
291
301
|
if raise_exception:
|
|
292
|
-
raise ChartOfAccountsModelValidationError(
|
|
302
|
+
raise ChartOfAccountsModelValidationError(
|
|
303
|
+
message=f'Root Nodes already Exist in CoA {self.uuid}...'
|
|
304
|
+
)
|
|
293
305
|
return
|
|
294
306
|
|
|
295
307
|
if ROOT_COA not in existing_root_roles:
|
|
@@ -305,12 +317,14 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
305
317
|
role_default=True,
|
|
306
318
|
active=False,
|
|
307
319
|
locked=True,
|
|
308
|
-
balance_type=role_meta['balance_type']
|
|
320
|
+
balance_type=role_meta['balance_type'],
|
|
309
321
|
)
|
|
310
322
|
AccountModel.add_root(instance=root_account)
|
|
311
323
|
|
|
312
324
|
# must retrieve root model after added pero django-treebeard documentation...
|
|
313
|
-
coa_root_account_model = AccountModel.objects.get(
|
|
325
|
+
coa_root_account_model = AccountModel.objects.get(
|
|
326
|
+
uuid__exact=account_pk
|
|
327
|
+
)
|
|
314
328
|
|
|
315
329
|
for root_role in ROOT_GROUP_LEVEL_2:
|
|
316
330
|
if root_role not in existing_root_roles:
|
|
@@ -326,8 +340,9 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
326
340
|
role_default=True,
|
|
327
341
|
active=False,
|
|
328
342
|
locked=True,
|
|
329
|
-
balance_type=role_meta['balance_type']
|
|
330
|
-
)
|
|
343
|
+
balance_type=role_meta['balance_type'],
|
|
344
|
+
)
|
|
345
|
+
)
|
|
331
346
|
self.configured = True
|
|
332
347
|
|
|
333
348
|
def get_coa_root_accounts_qs(self) -> AccountModelQuerySet:
|
|
@@ -350,10 +365,12 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
350
365
|
qs = self.get_coa_root_accounts_qs()
|
|
351
366
|
return qs.get(role__exact=ROOT_COA)
|
|
352
367
|
|
|
353
|
-
def get_account_root_node(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
368
|
+
def get_account_root_node(
|
|
369
|
+
self,
|
|
370
|
+
account_model: AccountModel,
|
|
371
|
+
root_account_qs: Optional[AccountModelQuerySet] = None,
|
|
372
|
+
as_queryset: bool = False,
|
|
373
|
+
) -> AccountModel:
|
|
357
374
|
"""
|
|
358
375
|
Fetches the root node of the ChartOfAccountModel instance. The root node is the highest level of the CoA
|
|
359
376
|
hierarchy. It can be used to traverse the hierarchy of the CoA structure downstream.
|
|
@@ -381,7 +398,9 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
381
398
|
|
|
382
399
|
if account_model.coa_model_id != self.uuid:
|
|
383
400
|
raise ChartOfAccountsModelValidationError(
|
|
384
|
-
message=_(
|
|
401
|
+
message=_(
|
|
402
|
+
f'The account model {account_model} is not part of the chart of accounts {self.name}.'
|
|
403
|
+
),
|
|
385
404
|
)
|
|
386
405
|
|
|
387
406
|
# Chart of Accounts hasn't been configured...
|
|
@@ -389,26 +408,39 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
389
408
|
self.configure(raise_exception=True)
|
|
390
409
|
|
|
391
410
|
if not account_model.is_root_account():
|
|
392
|
-
|
|
393
411
|
if not root_account_qs:
|
|
394
412
|
root_account_qs = self.get_coa_root_accounts_qs()
|
|
395
413
|
|
|
396
414
|
if account_model.is_asset():
|
|
397
|
-
qs = root_account_qs.filter(
|
|
415
|
+
qs = root_account_qs.filter(
|
|
416
|
+
code__exact=ROOT_GROUP_META[ROOT_ASSETS]['code']
|
|
417
|
+
)
|
|
398
418
|
elif account_model.is_liability():
|
|
399
|
-
qs = root_account_qs.filter(
|
|
419
|
+
qs = root_account_qs.filter(
|
|
420
|
+
code__exact=ROOT_GROUP_META[ROOT_LIABILITIES]['code']
|
|
421
|
+
)
|
|
400
422
|
elif account_model.is_capital():
|
|
401
|
-
qs = root_account_qs.filter(
|
|
423
|
+
qs = root_account_qs.filter(
|
|
424
|
+
code__exact=ROOT_GROUP_META[ROOT_CAPITAL]['code']
|
|
425
|
+
)
|
|
402
426
|
elif account_model.is_income():
|
|
403
|
-
qs = root_account_qs.filter(
|
|
427
|
+
qs = root_account_qs.filter(
|
|
428
|
+
code__exact=ROOT_GROUP_META[ROOT_INCOME]['code']
|
|
429
|
+
)
|
|
404
430
|
elif account_model.is_cogs():
|
|
405
|
-
qs = root_account_qs.filter(
|
|
431
|
+
qs = root_account_qs.filter(
|
|
432
|
+
code__exact=ROOT_GROUP_META[ROOT_COGS]['code']
|
|
433
|
+
)
|
|
406
434
|
elif account_model.is_expense():
|
|
407
|
-
qs = root_account_qs.filter(
|
|
435
|
+
qs = root_account_qs.filter(
|
|
436
|
+
code__exact=ROOT_GROUP_META[ROOT_EXPENSES]['code']
|
|
437
|
+
)
|
|
408
438
|
else:
|
|
409
|
-
raise ChartOfAccountsModelValidationError(
|
|
410
|
-
|
|
411
|
-
|
|
439
|
+
raise ChartOfAccountsModelValidationError(
|
|
440
|
+
message=f'Unable to locate Balance Sheet'
|
|
441
|
+
' root node for account code: '
|
|
442
|
+
f'{account_model.code} {account_model.name}'
|
|
443
|
+
)
|
|
412
444
|
if as_queryset:
|
|
413
445
|
return qs
|
|
414
446
|
return qs.get()
|
|
@@ -490,15 +522,12 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
490
522
|
message=_(f'CoA {self.uuid} already has a slug')
|
|
491
523
|
)
|
|
492
524
|
return
|
|
493
|
-
self.slug = f'coa-{self.entity.slug[-5:]}-' + ''.join(
|
|
525
|
+
self.slug = f'coa-{self.entity.slug[-5:]}-' + ''.join(
|
|
526
|
+
choices(SLUG_SUFFIX, k=15)
|
|
527
|
+
)
|
|
494
528
|
|
|
495
529
|
if commit:
|
|
496
|
-
self.save(
|
|
497
|
-
update_fields=[
|
|
498
|
-
'slug',
|
|
499
|
-
'updated'
|
|
500
|
-
]
|
|
501
|
-
)
|
|
530
|
+
self.save(update_fields=['slug', 'updated'])
|
|
502
531
|
|
|
503
532
|
def is_default(self) -> bool:
|
|
504
533
|
"""
|
|
@@ -549,9 +578,11 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
549
578
|
message=f'Invalid root queryset for CoA {self.name}'
|
|
550
579
|
)
|
|
551
580
|
|
|
552
|
-
def insert_account(
|
|
553
|
-
|
|
554
|
-
|
|
581
|
+
def insert_account(
|
|
582
|
+
self,
|
|
583
|
+
account_model: AccountModel,
|
|
584
|
+
root_account_qs: Optional[AccountModelQuerySet] = None,
|
|
585
|
+
):
|
|
555
586
|
"""
|
|
556
587
|
This method inserts the given account model into the chart of accounts (COA) instance.
|
|
557
588
|
It first verifies if the account model's COA model ID matches the COA's UUID. If not, it
|
|
@@ -599,21 +630,22 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
599
630
|
self.validate_account_model_qs(root_account_qs)
|
|
600
631
|
|
|
601
632
|
account_root_node: AccountModel = self.get_account_root_node(
|
|
602
|
-
account_model=account_model,
|
|
603
|
-
root_account_qs=root_account_qs
|
|
633
|
+
account_model=account_model, root_account_qs=root_account_qs
|
|
604
634
|
)
|
|
605
635
|
|
|
606
636
|
account_root_node.add_child(instance=account_model)
|
|
607
637
|
coa_accounts_qs = self.get_non_root_coa_accounts_qs()
|
|
608
638
|
return coa_accounts_qs.get(uuid__exact=account_model.uuid)
|
|
609
639
|
|
|
610
|
-
def create_account(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
640
|
+
def create_account(
|
|
641
|
+
self,
|
|
642
|
+
code: str,
|
|
643
|
+
role: str,
|
|
644
|
+
name: str,
|
|
645
|
+
balance_type: str,
|
|
646
|
+
active: bool,
|
|
647
|
+
root_account_qs: Optional[AccountModelQuerySet] = None,
|
|
648
|
+
):
|
|
617
649
|
"""
|
|
618
650
|
Proper method for inserting a new Account Model into a CoA.
|
|
619
651
|
Use this in liu of the direct instantiation of the AccountModel of using the django related manager.
|
|
@@ -644,13 +676,12 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
644
676
|
role=role,
|
|
645
677
|
active=active,
|
|
646
678
|
balance_type=balance_type,
|
|
647
|
-
coa_model=self
|
|
679
|
+
coa_model=self,
|
|
648
680
|
)
|
|
649
681
|
account_model.clean()
|
|
650
682
|
|
|
651
683
|
account_model = self.insert_account(
|
|
652
|
-
account_model=account_model,
|
|
653
|
-
root_account_qs=root_account_qs
|
|
684
|
+
account_model=account_model, root_account_qs=root_account_qs
|
|
654
685
|
)
|
|
655
686
|
return account_model
|
|
656
687
|
|
|
@@ -666,7 +697,9 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
666
697
|
account_qs.update(locked=False)
|
|
667
698
|
return account_qs
|
|
668
699
|
|
|
669
|
-
def mark_as_default(
|
|
700
|
+
def mark_as_default(
|
|
701
|
+
self, commit: bool = False, raise_exception: bool = False, **kwargs
|
|
702
|
+
):
|
|
670
703
|
"""
|
|
671
704
|
Marks the current Chart of Accounts instances as default for the EntityModel.
|
|
672
705
|
|
|
@@ -686,24 +719,18 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
686
719
|
if not self.can_mark_as_default():
|
|
687
720
|
if raise_exception:
|
|
688
721
|
raise ChartOfAccountsModelValidationError(
|
|
689
|
-
message=_(
|
|
722
|
+
message=_(
|
|
723
|
+
f'The Chart of Accounts {self.slug} cannot be marked as default'
|
|
724
|
+
)
|
|
690
725
|
)
|
|
691
726
|
return
|
|
692
727
|
self.entity.default_coa_id = self.uuid
|
|
693
728
|
self.clean()
|
|
694
729
|
if commit:
|
|
695
|
-
self.entity.save(
|
|
696
|
-
update_fields=[
|
|
697
|
-
'default_coa_id',
|
|
698
|
-
'updated'
|
|
699
|
-
]
|
|
700
|
-
)
|
|
730
|
+
self.entity.save(update_fields=['default_coa_id', 'updated'])
|
|
701
731
|
|
|
702
732
|
def can_mark_as_default(self):
|
|
703
|
-
return all([
|
|
704
|
-
self.is_active(),
|
|
705
|
-
not self.is_default()
|
|
706
|
-
])
|
|
733
|
+
return all([self.is_active(), not self.is_default()])
|
|
707
734
|
|
|
708
735
|
def can_activate(self) -> bool:
|
|
709
736
|
"""
|
|
@@ -723,12 +750,11 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
723
750
|
-------
|
|
724
751
|
True if the object can be deactivated, False otherwise.
|
|
725
752
|
"""
|
|
726
|
-
return all([
|
|
727
|
-
self.is_active(),
|
|
728
|
-
not self.is_default()
|
|
729
|
-
])
|
|
753
|
+
return all([self.is_active(), not self.is_default()])
|
|
730
754
|
|
|
731
|
-
def mark_as_active(
|
|
755
|
+
def mark_as_active(
|
|
756
|
+
self, commit: bool = False, raise_exception: bool = False, **kwargs
|
|
757
|
+
):
|
|
732
758
|
"""
|
|
733
759
|
Marks the current Chart of Accounts as Active.
|
|
734
760
|
|
|
@@ -749,13 +775,11 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
749
775
|
self.active = True
|
|
750
776
|
self.clean()
|
|
751
777
|
if commit:
|
|
752
|
-
self.save(
|
|
753
|
-
update_fields=[
|
|
754
|
-
'active',
|
|
755
|
-
'updated'
|
|
756
|
-
])
|
|
778
|
+
self.save(update_fields=['active', 'updated'])
|
|
757
779
|
|
|
758
|
-
def mark_as_inactive(
|
|
780
|
+
def mark_as_inactive(
|
|
781
|
+
self, commit: bool = False, raise_exception: bool = False, **kwargs
|
|
782
|
+
):
|
|
759
783
|
"""
|
|
760
784
|
Marks the current Chart of Accounts as Active.
|
|
761
785
|
|
|
@@ -776,11 +800,7 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
776
800
|
self.active = False
|
|
777
801
|
self.clean()
|
|
778
802
|
if commit:
|
|
779
|
-
self.save(
|
|
780
|
-
update_fields=[
|
|
781
|
-
'active',
|
|
782
|
-
'updated'
|
|
783
|
-
])
|
|
803
|
+
self.save(update_fields=['active', 'updated'])
|
|
784
804
|
|
|
785
805
|
# URLS....
|
|
786
806
|
def mark_as_default_url(self) -> str:
|
|
@@ -794,10 +814,7 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
794
814
|
"""
|
|
795
815
|
return reverse(
|
|
796
816
|
viewname='django_ledger:coa-action-mark-as-default',
|
|
797
|
-
kwargs={
|
|
798
|
-
'entity_slug': self.entity_slug,
|
|
799
|
-
'coa_slug': self.slug
|
|
800
|
-
}
|
|
817
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
801
818
|
)
|
|
802
819
|
|
|
803
820
|
def mark_as_active_url(self) -> str:
|
|
@@ -811,10 +828,7 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
811
828
|
"""
|
|
812
829
|
return reverse(
|
|
813
830
|
viewname='django_ledger:coa-action-mark-as-active',
|
|
814
|
-
kwargs={
|
|
815
|
-
'entity_slug': self.entity_slug,
|
|
816
|
-
'coa_slug': self.slug
|
|
817
|
-
}
|
|
831
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
818
832
|
)
|
|
819
833
|
|
|
820
834
|
def mark_as_inactive_url(self) -> str:
|
|
@@ -828,74 +842,51 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
828
842
|
"""
|
|
829
843
|
return reverse(
|
|
830
844
|
viewname='django_ledger:coa-action-mark-as-inactive',
|
|
831
|
-
kwargs={
|
|
832
|
-
'entity_slug': self.entity_slug,
|
|
833
|
-
'coa_slug': self.slug
|
|
834
|
-
}
|
|
845
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
835
846
|
)
|
|
836
847
|
|
|
837
848
|
def get_coa_list_url(self):
|
|
838
849
|
return reverse(
|
|
839
|
-
viewname='django_ledger:coa-list',
|
|
840
|
-
kwargs={
|
|
841
|
-
'entity_slug': self.entity_slug
|
|
842
|
-
}
|
|
850
|
+
viewname='django_ledger:coa-list', kwargs={'entity_slug': self.entity_slug}
|
|
843
851
|
)
|
|
844
852
|
|
|
845
853
|
def get_coa_list_inactive_url(self):
|
|
846
854
|
return reverse(
|
|
847
855
|
viewname='django_ledger:coa-list-inactive',
|
|
848
|
-
kwargs={
|
|
849
|
-
'entity_slug': self.entity_slug
|
|
850
|
-
}
|
|
856
|
+
kwargs={'entity_slug': self.entity_slug},
|
|
851
857
|
)
|
|
852
858
|
|
|
853
859
|
def get_coa_create_url(self):
|
|
854
860
|
return reverse(
|
|
855
861
|
viewname='django_ledger:coa-create',
|
|
856
|
-
kwargs={
|
|
857
|
-
'entity_slug': self.entity_slug
|
|
858
|
-
}
|
|
862
|
+
kwargs={'entity_slug': self.entity_slug},
|
|
859
863
|
)
|
|
860
864
|
|
|
861
865
|
def get_absolute_url(self) -> str:
|
|
862
866
|
return reverse(
|
|
863
867
|
viewname='django_ledger:coa-detail',
|
|
864
|
-
kwargs={
|
|
865
|
-
'entity_slug': self.entity_slug,
|
|
866
|
-
'coa_slug': self.slug
|
|
867
|
-
}
|
|
868
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
868
869
|
)
|
|
869
870
|
|
|
870
871
|
def get_update_url(self) -> str:
|
|
871
872
|
return reverse(
|
|
872
873
|
viewname='django_ledger:coa-update',
|
|
873
|
-
kwargs={
|
|
874
|
-
'entity_slug': self.entity_slug,
|
|
875
|
-
'coa_slug': self.slug
|
|
876
|
-
}
|
|
874
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
877
875
|
)
|
|
878
876
|
|
|
879
877
|
def get_account_list_url(self):
|
|
880
|
-
|
|
881
878
|
if not self.slug:
|
|
882
879
|
self.generate_slug(commit=True)
|
|
883
880
|
|
|
884
881
|
return reverse(
|
|
885
882
|
viewname='django_ledger:account-list',
|
|
886
|
-
kwargs={
|
|
887
|
-
'entity_slug': self.entity_slug,
|
|
888
|
-
'coa_slug': self.slug
|
|
889
|
-
}
|
|
883
|
+
kwargs={'entity_slug': self.entity_slug, 'coa_slug': self.slug},
|
|
890
884
|
)
|
|
891
885
|
|
|
892
886
|
def get_create_coa_account_url(self):
|
|
893
887
|
return reverse(
|
|
894
888
|
viewname='django_ledger:account-create',
|
|
895
|
-
kwargs={
|
|
896
|
-
'coa_slug': self.slug,
|
|
897
|
-
'entity_slug': self.entity_slug
|
|
898
|
-
}
|
|
889
|
+
kwargs={'coa_slug': self.slug, 'entity_slug': self.entity_slug},
|
|
899
890
|
)
|
|
900
891
|
|
|
901
892
|
def clean(self):
|