django-ledger 0.8.0__tar.gz → 0.8.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.0/django_ledger.egg-info → django_ledger-0.8.1}/PKG-INFO +1 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/__init__.py +1 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/account.py +45 -46
- django_ledger-0.8.1/django_ledger/forms/data_import.py +317 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_core.py +507 -374
- django_ledger-0.8.1/django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/__init__.py +2 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/bill.py +337 -300
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/customer.py +47 -34
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/data_import.py +770 -289
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/entity.py +882 -637
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/mixins.py +421 -280
- django_ledger-0.8.1/django_ledger/models/receipt.py +1083 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/transactions.py +105 -41
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/unit.py +42 -30
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/utils.py +12 -2
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/vendor.py +85 -66
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/settings.py +1 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
- django_ledger-0.8.1/django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/tags/customer_table.html +3 -1
- django_ledger-0.8.1/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +62 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +26 -10
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/base.html +1 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
- django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
- django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
- django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
- django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
- django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +3 -2
- django_ledger-0.8.1/django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templatetags/django_ledger.py +338 -191
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/__init__.py +1 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/customer.py +3 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/data_import.py +3 -0
- django_ledger-0.8.1/django_ledger/urls/receipt.py +102 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/vendor.py +1 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/__init__.py +1 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/customer.py +56 -14
- django_ledger-0.8.1/django_ledger/views/data_import.py +270 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/mixins.py +112 -86
- django_ledger-0.8.1/django_ledger/views/receipt.py +294 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/vendor.py +53 -14
- {django_ledger-0.8.0 → django_ledger-0.8.1/django_ledger.egg-info}/PKG-INFO +1 -1
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/SOURCES.txt +11 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/pyproject.toml +16 -1
- django_ledger-0.8.0/django_ledger/forms/data_import.py +0 -198
- django_ledger-0.8.0/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +0 -41
- django_ledger-0.8.0/django_ledger/views/data_import.py +0 -217
- {django_ledger-0.8.0 → django_ledger-0.8.1}/AUTHORS.md +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/LICENSE +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/MANIFEST.in +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/README.md +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/entity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/ledger.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/apps.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/context.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/contrib/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/exceptions.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/app_filters.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/auth.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/bank_account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/bill.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/closing_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/customer.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/entity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/estimate.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/feedback.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/invoice.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/item.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/journal_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/ledger.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/purchase_order.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/transactions.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/unit.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/utils.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/vendor.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_context.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_generator.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_library.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_middleware.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/ofx.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/ratios.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/roles.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/commands/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/commands/generate_oauth2_codes.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0001_initial.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0002_alter_journalentrymodel_managers_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0003_remove_accountmodel_django_ledg_role_1bff96_idx_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0004_remove_itemmodel_depth_remove_itemmodel_numchild_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0005_remove_itemmodel_django_ledg_invento_dbf206_idx_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0006_alter_journalentrymodel_je_number_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0007_remove_customermodel_django_ledg_custome_16f95a_idx_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0008_closingentrymodel_closingentrytransactionmodel_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0009_delete_stagedtransactionmodel.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0010_delete_importjobmodel.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0011_importjobmodel_alter_accountmodel_role_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0012_stagedtransactionmodel_activity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0013_stagedtransactionmodel_bundle_split.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0016_remove_accountmodel_django_ledg_coa_mod_e19964_idx_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0017_alter_accountmodel_unique_together_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0018_transactionmodel_cleared_transactionmodel_reconciled_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0019_alter_transactionmodel_amount_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0023_customermodel_customer_code_customermodel_picture_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/bank_account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/closing_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/coa_default.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/deprecations.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/estimate.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/invoice.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/items.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/journal_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/ledger.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/purchase_order.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/digest.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/net_payable.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/net_receivable.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/pnl.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/signals.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/balance_sheet.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/cash_flow_statement.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/core.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/income_statement.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/djetler.bundle.js +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/styles.bundle.js +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/css/djl_styles.css +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/img/daniel-weiss-aj2Os9mYgJU-unsplash.jpg +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/img/made-with-bulma.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo-report.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@4x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@4x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@4x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@4x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/favicon.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@0.5x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@2x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@3x.png +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_create_child.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/tags/account_txs_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/tags/accounts_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/auth/login.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_void.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/includes/card_bill.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/tags/bill_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/includes/coa_card.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/includes/card_closing_entry.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_txs_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/activity_form.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/breadcrumbs.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/chart_container.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/date_picker.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/default_entity.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/feedback_button.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/filters.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/icon.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/menu.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/modals.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/modals_v2.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/includes/card_customer.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/data_import_job_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/data_import_job_txs.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entitiy_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/home.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/includes/card_entity.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/card_estimate.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_item_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/tags/ce_item_formset.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/tags/expense_item_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/cash_flow.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/income_statement.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/breadcrumbs.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/card_markdown.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/footer.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/messages.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/nav.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/page_header.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_bs.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_ic.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_ratios.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_recount.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_item_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_detail_txs.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/content_layout_2.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/tags/ledgers_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/tags/product_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_item_formset.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/tags/po_item_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/tags/services_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/transactions/tags/txs_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_detail.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/tags/uom_table.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_delete.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/includes/card_vendor.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_create.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_list.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_update.html +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templatetags/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/base.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/bdd/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/bdd/features/steps/README.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_auth.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_bill.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_closing_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_entity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io_ofx/__init__.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io_ofx/tests.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_purchase_order.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_transactions.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/auth.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/bank_account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/bill.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/closing_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/djl_api.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/entity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/estimate.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/feedback.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/financial_statement.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/home.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/inventory.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/invoice.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/item.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/journal_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/ledger.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/purchase_order.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/transactions.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/unit.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/utils.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/auth.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/bank_account.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/bill.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/chart_of_accounts.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/closing_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/djl_api.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/entity.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/estimate.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/feedback.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/financial_statement.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/home.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/inventory.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/invoice.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/item.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/journal_entry.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/ledger.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/purchase_order.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/transactions.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/unit.py +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/dependency_links.txt +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/requires.txt +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/top_level.txt +0 -0
- {django_ledger-0.8.0 → django_ledger-0.8.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.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>
|
|
@@ -5,10 +5,19 @@ Copyright© EDMA Group Inc licensed under the GPLv3 Agreement.
|
|
|
5
5
|
Contributions to this module:
|
|
6
6
|
* Miguel Sanda <msanda@arrobalytics.com>
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from random import randint
|
|
9
10
|
from typing import Optional
|
|
10
11
|
|
|
11
|
-
from django.forms import
|
|
12
|
+
from django.forms import (
|
|
13
|
+
TextInput,
|
|
14
|
+
Select,
|
|
15
|
+
ModelForm,
|
|
16
|
+
ChoiceField,
|
|
17
|
+
ValidationError,
|
|
18
|
+
CheckboxInput,
|
|
19
|
+
HiddenInput,
|
|
20
|
+
)
|
|
12
21
|
from django.utils.translation import gettext_lazy as _
|
|
13
22
|
from treebeard.forms import MoveNodeForm
|
|
14
23
|
|
|
@@ -62,25 +71,27 @@ class AccountModelCreateForm(ModelForm):
|
|
|
62
71
|
'balance_type',
|
|
63
72
|
'active',
|
|
64
73
|
'active',
|
|
65
|
-
'coa_model'
|
|
74
|
+
'coa_model',
|
|
66
75
|
]
|
|
67
76
|
widgets = {
|
|
68
|
-
'code': TextInput(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
'
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
'code': TextInput(
|
|
78
|
+
attrs={
|
|
79
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
|
|
80
|
+
'placeholder': _(
|
|
81
|
+
'Alpha Numeric (auto generated if not provided)...'
|
|
82
|
+
),
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
'name': TextInput(
|
|
86
|
+
attrs={
|
|
87
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
|
|
88
|
+
'placeholder': _('Account Name...'),
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
'role': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
79
92
|
'role_default': CheckboxInput(),
|
|
80
|
-
'balance_type': Select(attrs={
|
|
81
|
-
|
|
82
|
-
}),
|
|
83
|
-
'coa_model': HiddenInput()
|
|
93
|
+
'balance_type': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
94
|
+
'coa_model': HiddenInput(),
|
|
84
95
|
}
|
|
85
96
|
|
|
86
97
|
|
|
@@ -88,7 +99,7 @@ class AccountModelUpdateForm(MoveNodeForm):
|
|
|
88
99
|
"""
|
|
89
100
|
AccountModelUpdateForm
|
|
90
101
|
|
|
91
|
-
A form for updating account model, inheriting from MoveNodeForm.
|
|
102
|
+
A form for updating the account model, inheriting from MoveNodeForm.
|
|
92
103
|
|
|
93
104
|
Attributes
|
|
94
105
|
----------
|
|
@@ -98,36 +109,32 @@ class AccountModelUpdateForm(MoveNodeForm):
|
|
|
98
109
|
An optional choice field for selecting the relative node.
|
|
99
110
|
"""
|
|
100
111
|
|
|
101
|
-
_position = ChoiceField(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
_ref_node_id = ChoiceField(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
_position = ChoiceField(
|
|
113
|
+
required=True,
|
|
114
|
+
label=_('Position'),
|
|
115
|
+
widget=Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
116
|
+
)
|
|
117
|
+
_ref_node_id = ChoiceField(
|
|
118
|
+
required=False,
|
|
119
|
+
label=_('Relative to'),
|
|
120
|
+
widget=Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
121
|
+
)
|
|
112
122
|
|
|
113
123
|
def __init__(self, *args, **kwargs):
|
|
114
124
|
super().__init__(*args, **kwargs)
|
|
115
125
|
self.fields['role'].disabled = True
|
|
116
126
|
self.fields['coa_model'].disabled = True
|
|
117
127
|
|
|
118
|
-
|
|
119
128
|
@classmethod
|
|
120
129
|
def mk_dropdown_tree(cls, model, for_node: Optional[AccountModel] = None):
|
|
121
|
-
"""
|
|
130
|
+
"""Creates a tree-like list of choices"""
|
|
122
131
|
|
|
123
132
|
if not for_node:
|
|
124
133
|
raise ValidationError(message='Must provide for_node argument.')
|
|
125
134
|
|
|
126
135
|
qs = for_node.get_account_move_choice_queryset()
|
|
127
136
|
|
|
128
|
-
return [
|
|
129
|
-
(i.uuid, f'{"-" * (i.depth - 1)} {i}') for i in qs
|
|
130
|
-
]
|
|
137
|
+
return [(i.uuid, f'{"-" * (i.depth - 1)} {i}') for i in qs]
|
|
131
138
|
|
|
132
139
|
def clean_role(self):
|
|
133
140
|
return self.instance.role
|
|
@@ -147,17 +154,9 @@ class AccountModelUpdateForm(MoveNodeForm):
|
|
|
147
154
|
widgets = {
|
|
148
155
|
'role': HiddenInput(),
|
|
149
156
|
'coa_model': HiddenInput(),
|
|
150
|
-
'parent': Select(attrs={
|
|
151
|
-
|
|
152
|
-
}),
|
|
153
|
-
'
|
|
154
|
-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
|
|
155
|
-
}),
|
|
156
|
-
'code': TextInput(attrs={
|
|
157
|
-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
|
|
158
|
-
}),
|
|
159
|
-
'name': TextInput(attrs={
|
|
160
|
-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
|
|
161
|
-
}),
|
|
157
|
+
'parent': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
158
|
+
'balance_type': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
159
|
+
'code': TextInput(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
160
|
+
'name': TextInput(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
|
|
162
161
|
'role_default': CheckboxInput(),
|
|
163
162
|
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
from django import forms
|
|
2
|
+
from django.forms import (
|
|
3
|
+
ModelForm,
|
|
4
|
+
BaseModelFormSet,
|
|
5
|
+
modelformset_factory,
|
|
6
|
+
Select,
|
|
7
|
+
NumberInput,
|
|
8
|
+
HiddenInput,
|
|
9
|
+
TextInput,
|
|
10
|
+
ValidationError,
|
|
11
|
+
)
|
|
12
|
+
from django.utils.translation import gettext_lazy as _
|
|
13
|
+
|
|
14
|
+
from django_ledger.io import GROUP_EXPENSES, GROUP_INCOME
|
|
15
|
+
from django_ledger.models import (
|
|
16
|
+
StagedTransactionModel,
|
|
17
|
+
ImportJobModel,
|
|
18
|
+
EntityModel,
|
|
19
|
+
)
|
|
20
|
+
from django_ledger.settings import DJANGO_LEDGER_FORM_INPUT_CLASSES
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ImportJobModelCreateForm(ModelForm):
|
|
24
|
+
def __init__(self, entity_model: EntityModel, *args, **kwargs):
|
|
25
|
+
super().__init__(*args, **kwargs)
|
|
26
|
+
self.ENTITY_MODEL: EntityModel = entity_model
|
|
27
|
+
self.fields[
|
|
28
|
+
'bank_account_model'
|
|
29
|
+
].queryset = self.ENTITY_MODEL.bankaccountmodel_set.all().active()
|
|
30
|
+
|
|
31
|
+
ofx_file = forms.FileField(
|
|
32
|
+
label='Select File...',
|
|
33
|
+
required=True,
|
|
34
|
+
widget=forms.FileInput(attrs={'class': 'file-input', 'accept': '.ofx,.qfx'}),
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
class Meta:
|
|
38
|
+
model = ImportJobModel
|
|
39
|
+
fields = [
|
|
40
|
+
'bank_account_model',
|
|
41
|
+
'description',
|
|
42
|
+
]
|
|
43
|
+
widgets = {
|
|
44
|
+
'description': TextInput(
|
|
45
|
+
attrs={
|
|
46
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-large',
|
|
47
|
+
'placeholder': _('Name this import...'),
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
'bank_account_model': Select(
|
|
51
|
+
attrs={
|
|
52
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
}
|
|
56
|
+
help_texts = {
|
|
57
|
+
'bank_account_model': _(
|
|
58
|
+
'Select the bank account to import transactions from.'
|
|
59
|
+
),
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class ImportJobModelUpdateForm(ModelForm):
|
|
64
|
+
class Meta:
|
|
65
|
+
model = ImportJobModel
|
|
66
|
+
fields = ['description']
|
|
67
|
+
widgets = {
|
|
68
|
+
'description': TextInput(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class StagedTransactionModelForm(ModelForm):
|
|
73
|
+
tx_import = forms.BooleanField(initial=False, required=False)
|
|
74
|
+
tx_split = forms.BooleanField(initial=False, required=False)
|
|
75
|
+
|
|
76
|
+
def __init__(self, base_formset_instance, *args, **kwargs):
|
|
77
|
+
super().__init__(*args, **kwargs)
|
|
78
|
+
self.BASE_FORMSET_INSTANCE: 'BaseStagedTransactionModelFormSet' = (
|
|
79
|
+
base_formset_instance
|
|
80
|
+
)
|
|
81
|
+
self.VENDOR_CHOICES = self.BASE_FORMSET_INSTANCE.VENDOR_CHOICES
|
|
82
|
+
self.VENDOR_MAP = self.BASE_FORMSET_INSTANCE.VENDOR_MAP
|
|
83
|
+
|
|
84
|
+
self.CUSTOMER_CHOICES = self.BASE_FORMSET_INSTANCE.CUSTOMER_CHOICES
|
|
85
|
+
self.CUSTOMER_MAP = self.BASE_FORMSET_INSTANCE.CUSTOMER_MAP
|
|
86
|
+
|
|
87
|
+
self.EXPENSE_ACCOUNT_CHOICES = (
|
|
88
|
+
self.BASE_FORMSET_INSTANCE.ACCOUNT_MODEL_EXPENSES_CHOICES
|
|
89
|
+
)
|
|
90
|
+
self.SALES_ACCOUNT_CHOICES = (
|
|
91
|
+
self.BASE_FORMSET_INSTANCE.ACCOUNT_MODEL_SALES_CHOICES
|
|
92
|
+
)
|
|
93
|
+
self.SHOW_VENDOR_FIELD: bool = False
|
|
94
|
+
self.SHOW_CUSTOMER_FIELD: bool = False
|
|
95
|
+
|
|
96
|
+
staged_tx_model: StagedTransactionModel = getattr(self, 'instance', None)
|
|
97
|
+
|
|
98
|
+
if staged_tx_model.can_migrate_receipt():
|
|
99
|
+
if staged_tx_model.is_expense():
|
|
100
|
+
self.fields['customer_model'].widget = forms.HiddenInput()
|
|
101
|
+
self.fields['vendor_model'].choices = self.VENDOR_CHOICES
|
|
102
|
+
self.fields['account_model'].choices = self.EXPENSE_ACCOUNT_CHOICES
|
|
103
|
+
self.SHOW_VENDOR_FIELD = True
|
|
104
|
+
elif staged_tx_model.is_sales():
|
|
105
|
+
self.fields['vendor_model'].widget = forms.HiddenInput()
|
|
106
|
+
self.fields['customer_model'].choices = self.CUSTOMER_CHOICES
|
|
107
|
+
self.fields['account_model'].choices = self.SALES_ACCOUNT_CHOICES
|
|
108
|
+
self.SHOW_CUSTOMER_FIELD = True
|
|
109
|
+
else:
|
|
110
|
+
self.fields['customer_model'].widget = forms.HiddenInput()
|
|
111
|
+
self.fields['vendor_model'].widget = forms.HiddenInput()
|
|
112
|
+
# avoids multiple DB queries rendering the formset...
|
|
113
|
+
self.fields[
|
|
114
|
+
'account_model'
|
|
115
|
+
].choices = self.BASE_FORMSET_INSTANCE.ACCOUNT_MODEL_CHOICES
|
|
116
|
+
|
|
117
|
+
# avoids multiple DB queries rendering the formset...
|
|
118
|
+
self.fields[
|
|
119
|
+
'unit_model'
|
|
120
|
+
].choices = self.BASE_FORMSET_INSTANCE.UNIT_MODEL_CHOICES
|
|
121
|
+
|
|
122
|
+
if staged_tx_model:
|
|
123
|
+
if not staged_tx_model.is_children():
|
|
124
|
+
self.fields['amount_split'].widget = HiddenInput()
|
|
125
|
+
self.fields['amount_split'].disabled = True
|
|
126
|
+
else:
|
|
127
|
+
self.fields['bundle_split'].widget = HiddenInput()
|
|
128
|
+
self.fields['bundle_split'].disabled = True
|
|
129
|
+
|
|
130
|
+
if staged_tx_model.has_children():
|
|
131
|
+
self.fields['receipt_type'].widget = HiddenInput()
|
|
132
|
+
self.fields['receipt_type'].disabled = True
|
|
133
|
+
|
|
134
|
+
if not staged_tx_model.can_have_account():
|
|
135
|
+
self.fields['account_model'].widget = HiddenInput()
|
|
136
|
+
self.fields['account_model'].disabled = True
|
|
137
|
+
|
|
138
|
+
if not staged_tx_model.can_have_unit():
|
|
139
|
+
self.fields['unit_model'].widget = HiddenInput()
|
|
140
|
+
self.fields['unit_model'].disabled = True
|
|
141
|
+
|
|
142
|
+
# receipt-related field visibility: not allowed for children rows
|
|
143
|
+
if staged_tx_model.is_children():
|
|
144
|
+
for f in [
|
|
145
|
+
'receipt_type',
|
|
146
|
+
'vendor_model',
|
|
147
|
+
'customer_model',
|
|
148
|
+
'bundle_split',
|
|
149
|
+
]:
|
|
150
|
+
self.fields[f].widget = HiddenInput()
|
|
151
|
+
self.fields[f].disabled = True
|
|
152
|
+
|
|
153
|
+
if staged_tx_model.is_single():
|
|
154
|
+
self.fields['bundle_split'].widget = HiddenInput()
|
|
155
|
+
self.fields['bundle_split'].disabled = True
|
|
156
|
+
|
|
157
|
+
if not staged_tx_model.can_migrate():
|
|
158
|
+
self.fields['tx_import'].widget = HiddenInput()
|
|
159
|
+
self.fields['tx_import'].disabled = True
|
|
160
|
+
|
|
161
|
+
if not staged_tx_model.can_split():
|
|
162
|
+
self.fields['tx_split'].widget = HiddenInput()
|
|
163
|
+
self.fields['tx_split'].disabled = True
|
|
164
|
+
|
|
165
|
+
def clean_account_model(self):
|
|
166
|
+
staged_txs_model: StagedTransactionModel = self.instance
|
|
167
|
+
if staged_txs_model.has_children():
|
|
168
|
+
return None
|
|
169
|
+
return self.cleaned_data['account_model']
|
|
170
|
+
|
|
171
|
+
def clean_unit_model(self):
|
|
172
|
+
staged_txs_model: StagedTransactionModel = self.instance
|
|
173
|
+
if not staged_txs_model.can_have_unit():
|
|
174
|
+
if staged_txs_model.is_children():
|
|
175
|
+
return staged_txs_model.parent.unit_model
|
|
176
|
+
return None
|
|
177
|
+
return self.cleaned_data['unit_model']
|
|
178
|
+
|
|
179
|
+
def clean_tx_import(self):
|
|
180
|
+
staged_txs_model: StagedTransactionModel = self.instance
|
|
181
|
+
if staged_txs_model.is_children():
|
|
182
|
+
return False
|
|
183
|
+
return self.cleaned_data['tx_import']
|
|
184
|
+
|
|
185
|
+
def clean(self):
|
|
186
|
+
if self.cleaned_data['tx_import'] and self.cleaned_data['tx_split']:
|
|
187
|
+
raise ValidationError(message=_('Cannot import and split at the same time'))
|
|
188
|
+
|
|
189
|
+
staged_txs_model: StagedTransactionModel = self.instance
|
|
190
|
+
if all(
|
|
191
|
+
[
|
|
192
|
+
staged_txs_model.has_children(),
|
|
193
|
+
staged_txs_model.has_receipt(),
|
|
194
|
+
not staged_txs_model.bundle_split,
|
|
195
|
+
]
|
|
196
|
+
):
|
|
197
|
+
raise ValidationError(
|
|
198
|
+
message=_(
|
|
199
|
+
'Receipt transactions cannot be split into multiple receipts.'
|
|
200
|
+
)
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
class Meta:
|
|
204
|
+
model = StagedTransactionModel
|
|
205
|
+
fields = [
|
|
206
|
+
'tx_import',
|
|
207
|
+
'bundle_split',
|
|
208
|
+
'amount_split',
|
|
209
|
+
'account_model',
|
|
210
|
+
'unit_model',
|
|
211
|
+
'receipt_type',
|
|
212
|
+
'vendor_model',
|
|
213
|
+
'customer_model',
|
|
214
|
+
]
|
|
215
|
+
widgets = {
|
|
216
|
+
'account_model': Select(
|
|
217
|
+
attrs={
|
|
218
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small',
|
|
219
|
+
}
|
|
220
|
+
),
|
|
221
|
+
'unit_model': Select(
|
|
222
|
+
attrs={
|
|
223
|
+
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small',
|
|
224
|
+
}
|
|
225
|
+
),
|
|
226
|
+
'amount_split': NumberInput(
|
|
227
|
+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small'}
|
|
228
|
+
),
|
|
229
|
+
'vendor_model': Select(
|
|
230
|
+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small'}
|
|
231
|
+
),
|
|
232
|
+
'customer_model': Select(
|
|
233
|
+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small'}
|
|
234
|
+
),
|
|
235
|
+
'receipt_type': Select(
|
|
236
|
+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES + ' is-small'}
|
|
237
|
+
),
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class BaseStagedTransactionModelFormSet(BaseModelFormSet):
|
|
242
|
+
def __init__(
|
|
243
|
+
self,
|
|
244
|
+
*args,
|
|
245
|
+
entity_model: EntityModel,
|
|
246
|
+
import_job_model: ImportJobModel,
|
|
247
|
+
**kwargs,
|
|
248
|
+
):
|
|
249
|
+
super().__init__(*args, **kwargs)
|
|
250
|
+
|
|
251
|
+
# validates that the job import model belongs to the entity model...
|
|
252
|
+
if import_job_model.entity_uuid != entity_model.uuid:
|
|
253
|
+
raise ValidationError(
|
|
254
|
+
message=_('Import job does not belong to this entity')
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
self.ENTITY_MODEL = entity_model
|
|
258
|
+
self.IMPORT_JOB_MODEL: ImportJobModel = import_job_model
|
|
259
|
+
|
|
260
|
+
self.queryset = (
|
|
261
|
+
self.IMPORT_JOB_MODEL.stagedtransactionmodel_set.all().is_pending()
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
self.MAPPED_ACCOUNT_MODEL = (
|
|
265
|
+
self.IMPORT_JOB_MODEL.bank_account_model.account_model
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
self.account_model_qs = (
|
|
269
|
+
entity_model.get_coa_accounts()
|
|
270
|
+
.available()
|
|
271
|
+
.exclude(uuid__exact=self.MAPPED_ACCOUNT_MODEL.uuid)
|
|
272
|
+
)
|
|
273
|
+
self.ACCOUNT_MODEL_CHOICES = [(None, '----')] + [
|
|
274
|
+
(a.uuid, a) for a in self.account_model_qs
|
|
275
|
+
]
|
|
276
|
+
self.ACCOUNT_MODEL_EXPENSES_CHOICES = [(None, '----')] + [
|
|
277
|
+
(a.uuid, a) for a in self.account_model_qs if a.role in GROUP_EXPENSES
|
|
278
|
+
]
|
|
279
|
+
self.ACCOUNT_MODEL_SALES_CHOICES = [(None, '----')] + [
|
|
280
|
+
(a.uuid, a) for a in self.account_model_qs if a.role in GROUP_INCOME
|
|
281
|
+
]
|
|
282
|
+
|
|
283
|
+
self.unit_model_qs = entity_model.entityunitmodel_set.all()
|
|
284
|
+
self.UNIT_MODEL_CHOICES = [
|
|
285
|
+
(u.uuid, u) if i > 0 else (None, '----')
|
|
286
|
+
for i, u in enumerate(self.unit_model_qs)
|
|
287
|
+
]
|
|
288
|
+
|
|
289
|
+
self.VENDOR_MODEL_QS = entity_model.vendormodel_set.visible()
|
|
290
|
+
len(self.VENDOR_MODEL_QS)
|
|
291
|
+
self.CUSTOMER_MODEL_QS = entity_model.customermodel_set.visible()
|
|
292
|
+
len(self.CUSTOMER_MODEL_QS)
|
|
293
|
+
|
|
294
|
+
self.VENDOR_CHOICES = [(None, '-----')] + [
|
|
295
|
+
(str(v.uuid), v) for v in self.VENDOR_MODEL_QS
|
|
296
|
+
]
|
|
297
|
+
self.CUSTOMER_CHOICES = [(None, '-----')] + [
|
|
298
|
+
(str(c.uuid), c) for c in self.CUSTOMER_MODEL_QS
|
|
299
|
+
]
|
|
300
|
+
|
|
301
|
+
self.VENDOR_MAP = dict(self.VENDOR_CHOICES)
|
|
302
|
+
self.CUSTOMER_MAP = dict(self.CUSTOMER_CHOICES)
|
|
303
|
+
|
|
304
|
+
def get_form_kwargs(self, index):
|
|
305
|
+
return {
|
|
306
|
+
'base_formset_instance': self,
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
StagedTransactionModelFormSet = modelformset_factory(
|
|
311
|
+
model=StagedTransactionModel,
|
|
312
|
+
form=StagedTransactionModelForm,
|
|
313
|
+
formset=BaseStagedTransactionModelFormSet,
|
|
314
|
+
can_delete=True,
|
|
315
|
+
can_order=False,
|
|
316
|
+
extra=0,
|
|
317
|
+
)
|