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.

Files changed (410) hide show
  1. {django_ledger-0.8.0/django_ledger.egg-info → django_ledger-0.8.1}/PKG-INFO +1 -1
  2. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/__init__.py +1 -1
  3. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/account.py +45 -46
  4. django_ledger-0.8.1/django_ledger/forms/data_import.py +317 -0
  5. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_core.py +507 -374
  6. django_ledger-0.8.1/django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
  7. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/__init__.py +2 -1
  8. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/bill.py +337 -300
  9. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/customer.py +47 -34
  10. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/data_import.py +770 -289
  11. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/entity.py +882 -637
  12. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/mixins.py +421 -280
  13. django_ledger-0.8.1/django_ledger/models/receipt.py +1083 -0
  14. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/transactions.py +105 -41
  15. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/unit.py +42 -30
  16. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/utils.py +12 -2
  17. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/vendor.py +85 -66
  18. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/settings.py +1 -0
  19. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
  20. django_ledger-0.8.1/django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
  21. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
  22. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/tags/customer_table.html +3 -1
  23. django_ledger-0.8.1/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +62 -0
  24. {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
  25. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
  26. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/base.html +1 -1
  27. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
  28. django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
  29. django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
  30. django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
  31. django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
  32. django_ledger-0.8.1/django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
  33. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +3 -2
  34. django_ledger-0.8.1/django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
  35. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templatetags/django_ledger.py +338 -191
  36. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/__init__.py +1 -0
  37. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/customer.py +3 -0
  38. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/data_import.py +3 -0
  39. django_ledger-0.8.1/django_ledger/urls/receipt.py +102 -0
  40. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/vendor.py +1 -0
  41. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/__init__.py +1 -0
  42. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/customer.py +56 -14
  43. django_ledger-0.8.1/django_ledger/views/data_import.py +270 -0
  44. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/mixins.py +112 -86
  45. django_ledger-0.8.1/django_ledger/views/receipt.py +294 -0
  46. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/vendor.py +53 -14
  47. {django_ledger-0.8.0 → django_ledger-0.8.1/django_ledger.egg-info}/PKG-INFO +1 -1
  48. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/SOURCES.txt +11 -0
  49. {django_ledger-0.8.0 → django_ledger-0.8.1}/pyproject.toml +16 -1
  50. django_ledger-0.8.0/django_ledger/forms/data_import.py +0 -198
  51. django_ledger-0.8.0/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +0 -41
  52. django_ledger-0.8.0/django_ledger/views/data_import.py +0 -217
  53. {django_ledger-0.8.0 → django_ledger-0.8.1}/AUTHORS.md +0 -0
  54. {django_ledger-0.8.0 → django_ledger-0.8.1}/LICENSE +0 -0
  55. {django_ledger-0.8.0 → django_ledger-0.8.1}/MANIFEST.in +0 -0
  56. {django_ledger-0.8.0 → django_ledger-0.8.1}/README.md +0 -0
  57. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/__init__.py +0 -0
  58. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/chart_of_accounts.py +0 -0
  59. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/entity.py +0 -0
  60. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/admin/ledger.py +0 -0
  61. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/apps.py +0 -0
  62. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/context.py +0 -0
  63. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/contrib/__init__.py +0 -0
  64. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/exceptions.py +0 -0
  65. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/__init__.py +0 -0
  66. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/app_filters.py +0 -0
  67. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/auth.py +0 -0
  68. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/bank_account.py +0 -0
  69. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/bill.py +0 -0
  70. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/chart_of_accounts.py +0 -0
  71. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/closing_entry.py +0 -0
  72. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/customer.py +0 -0
  73. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/entity.py +0 -0
  74. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/estimate.py +0 -0
  75. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/feedback.py +0 -0
  76. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/invoice.py +0 -0
  77. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/item.py +0 -0
  78. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/journal_entry.py +0 -0
  79. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/ledger.py +0 -0
  80. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/purchase_order.py +0 -0
  81. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/transactions.py +0 -0
  82. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/unit.py +0 -0
  83. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/utils.py +0 -0
  84. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/forms/vendor.py +0 -0
  85. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/__init__.py +0 -0
  86. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_context.py +0 -0
  87. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_generator.py +0 -0
  88. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_library.py +0 -0
  89. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/io_middleware.py +0 -0
  90. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/ofx.py +0 -0
  91. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/ratios.py +0 -0
  92. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/io/roles.py +0 -0
  93. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/__init__.py +0 -0
  94. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/commands/__init__.py +0 -0
  95. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/management/commands/generate_oauth2_codes.py +0 -0
  96. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0001_initial.py +0 -0
  97. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0002_alter_journalentrymodel_managers_and_more.py +0 -0
  98. {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
  99. {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
  100. {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
  101. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0006_alter_journalentrymodel_je_number_and_more.py +0 -0
  102. {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
  103. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0008_closingentrymodel_closingentrytransactionmodel_and_more.py +0 -0
  104. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0009_delete_stagedtransactionmodel.py +0 -0
  105. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0010_delete_importjobmodel.py +0 -0
  106. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0011_importjobmodel_alter_accountmodel_role_and_more.py +0 -0
  107. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0012_stagedtransactionmodel_activity.py +0 -0
  108. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0013_stagedtransactionmodel_bundle_split.py +0 -0
  109. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py +0 -0
  110. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py +0 -0
  111. {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
  112. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0017_alter_accountmodel_unique_together_and_more.py +0 -0
  113. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0018_transactionmodel_cleared_transactionmodel_reconciled_and_more.py +0 -0
  114. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0019_alter_transactionmodel_amount_and_more.py +0 -0
  115. {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
  116. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py +0 -0
  117. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py +0 -0
  118. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0023_customermodel_customer_code_customermodel_picture_and_more.py +0 -0
  119. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py +0 -0
  120. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +0 -0
  121. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/migrations/__init__.py +0 -0
  122. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/accounts.py +0 -0
  123. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/bank_account.py +0 -0
  124. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/chart_of_accounts.py +0 -0
  125. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/closing_entry.py +0 -0
  126. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/coa_default.py +0 -0
  127. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/deprecations.py +0 -0
  128. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/estimate.py +0 -0
  129. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/invoice.py +0 -0
  130. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/items.py +0 -0
  131. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/journal_entry.py +0 -0
  132. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/ledger.py +0 -0
  133. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/purchase_order.py +0 -0
  134. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/__init__.py +0 -0
  135. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/digest.py +0 -0
  136. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/net_payable.py +0 -0
  137. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/net_receivable.py +0 -0
  138. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/schemas/pnl.py +0 -0
  139. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/models/signals.py +0 -0
  140. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/__init__.py +0 -0
  141. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/balance_sheet.py +0 -0
  142. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/cash_flow_statement.py +0 -0
  143. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/core.py +0 -0
  144. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/report/income_statement.py +0 -0
  145. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/djetler.bundle.js +0 -0
  146. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +0 -0
  147. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/bundle/styles.bundle.js +0 -0
  148. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/css/djl_styles.css +0 -0
  149. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/img/daniel-weiss-aj2Os9mYgJU-unsplash.jpg +0 -0
  150. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/img/made-with-bulma.png +0 -0
  151. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo-report.png +0 -0
  152. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo.png +0 -0
  153. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@2x.png +0 -0
  154. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@3x.png +0 -0
  155. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo@4x.png +0 -0
  156. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1.png +0 -0
  157. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@2x.png +0 -0
  158. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@3x.png +0 -0
  159. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-logo_1@4x.png +0 -0
  160. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline.png +0 -0
  161. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@2x.png +0 -0
  162. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@3x.png +0 -0
  163. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-tagline@4x.png +0 -0
  164. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text.png +0 -0
  165. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@2x.png +0 -0
  166. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@3x.png +0 -0
  167. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/django-ledger-text@4x.png +0 -0
  168. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo/favicon.png +0 -0
  169. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/django_ledger_logo_dark.png +0 -0
  170. {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
  171. {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
  172. {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
  173. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert.png +0 -0
  174. {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
  175. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@2x.png +0 -0
  176. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-full-vert@3x.png +0 -0
  177. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-horiz.png +0 -0
  178. {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
  179. {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
  180. {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
  181. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo-full-vert.png +0 -0
  182. {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
  183. {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
  184. {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
  185. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo.png +0 -0
  186. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@0.5x.png +0 -0
  187. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@2x.png +0 -0
  188. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-logo@3x.png +0 -0
  189. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-horiz.png +0 -0
  190. {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
  191. {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
  192. {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
  193. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-full-vert.png +0 -0
  194. {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
  195. {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
  196. {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
  197. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz.png +0 -0
  198. {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
  199. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@2x.png +0 -0
  200. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/static/django_ledger/logo_2/djl-txt-horiz@3x.png +0 -0
  201. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_create.html +0 -0
  202. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_create_child.html +0 -0
  203. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_detail.html +0 -0
  204. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_list.html +0 -0
  205. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/account_update.html +0 -0
  206. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/tags/account_txs_table.html +0 -0
  207. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/account/tags/accounts_table.html +0 -0
  208. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/auth/login.html +0 -0
  209. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_create.html +0 -0
  210. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_list.html +0 -0
  211. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/bank_account_update.html +0 -0
  212. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html +0 -0
  213. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_create.html +0 -0
  214. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_delete.html +0 -0
  215. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_detail.html +0 -0
  216. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_list.html +0 -0
  217. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_update.html +0 -0
  218. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/bill_void.html +0 -0
  219. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/includes/card_bill.html +0 -0
  220. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html +0 -0
  221. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/bills/tags/bill_table.html +0 -0
  222. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_create.html +0 -0
  223. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_list.html +0 -0
  224. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/coa_update.html +0 -0
  225. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/chart_of_accounts/includes/coa_card.html +0 -0
  226. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_create.html +0 -0
  227. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_delete.html +0 -0
  228. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_detail.html +0 -0
  229. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_list.html +0 -0
  230. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/closing_entry_update.html +0 -0
  231. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/includes/card_closing_entry.html +0 -0
  232. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_table.html +0 -0
  233. {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
  234. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/activity_form.html +0 -0
  235. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/breadcrumbs.html +0 -0
  236. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/chart_container.html +0 -0
  237. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/date_picker.html +0 -0
  238. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/default_entity.html +0 -0
  239. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/feedback_button.html +0 -0
  240. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/filters.html +0 -0
  241. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/icon.html +0 -0
  242. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/menu.html +0 -0
  243. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/modals.html +0 -0
  244. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/components/modals_v2.html +0 -0
  245. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_create.html +0 -0
  246. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/customer_update.html +0 -0
  247. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/customer/includes/card_customer.html +0 -0
  248. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/data_import_job_list.html +0 -0
  249. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/data_import_job_txs.html +0 -0
  250. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_create.html +0 -0
  251. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_delete.html +0 -0
  252. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/data_import/import_job_update.html +0 -0
  253. {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
  254. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entitiy_list.html +0 -0
  255. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_create.html +0 -0
  256. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_delete.html +0 -0
  257. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/entity_update.html +0 -0
  258. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/home.html +0 -0
  259. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/entity/includes/card_entity.html +0 -0
  260. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_create.html +0 -0
  261. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_detail.html +0 -0
  262. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_list.html +0 -0
  263. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/estimate_update.html +0 -0
  264. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/card_estimate.html +0 -0
  265. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_item_table.html +0 -0
  266. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/includes/estimate_table.html +0 -0
  267. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/estimate/tags/ce_item_formset.html +0 -0
  268. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_create.html +0 -0
  269. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_list.html +0 -0
  270. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/expense_update.html +0 -0
  271. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/expense/tags/expense_item_table.html +0 -0
  272. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +0 -0
  273. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/cash_flow.html +0 -0
  274. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/income_statement.html +0 -0
  275. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +0 -0
  276. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +0 -0
  277. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +0 -0
  278. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/breadcrumbs.html +0 -0
  279. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/card_markdown.html +0 -0
  280. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/footer.html +0 -0
  281. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/messages.html +0 -0
  282. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/nav.html +0 -0
  283. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/page_header.html +0 -0
  284. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_bs.html +0 -0
  285. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_ic.html +0 -0
  286. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/includes/widget_ratios.html +0 -0
  287. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_create.html +0 -0
  288. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_list.html +0 -0
  289. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_item_update.html +0 -0
  290. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_list.html +0 -0
  291. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/inventory_recount.html +0 -0
  292. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_item_table.html +0 -0
  293. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/inventory/tags/inventory_table.html +0 -0
  294. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +0 -0
  295. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_create.html +0 -0
  296. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_delete.html +0 -0
  297. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_detail.html +0 -0
  298. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_list.html +0 -0
  299. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/invoice_update.html +0 -0
  300. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html +0 -0
  301. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/invoice/tags/invoice_table.html +0 -0
  302. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html +0 -0
  303. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_create.html +0 -0
  304. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_delete.html +0 -0
  305. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_detail.html +0 -0
  306. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_detail_txs.html +0 -0
  307. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_list.html +0 -0
  308. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/je_update.html +0 -0
  309. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html +0 -0
  310. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html +0 -0
  311. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/layouts/content_layout_2.html +0 -0
  312. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_create.html +0 -0
  313. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_delete.html +0 -0
  314. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_list.html +0 -0
  315. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/ledger_update.html +0 -0
  316. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/ledger/tags/ledgers_table.html +0 -0
  317. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_create.html +0 -0
  318. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_delete.html +0 -0
  319. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_list.html +0 -0
  320. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/product_update.html +0 -0
  321. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/product/tags/product_table.html +0 -0
  322. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html +0 -0
  323. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_item_formset.html +0 -0
  324. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/includes/po_table.html +0 -0
  325. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_create.html +0 -0
  326. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_delete.html +0 -0
  327. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_detail.html +0 -0
  328. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_list.html +0 -0
  329. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/po_update.html +0 -0
  330. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/purchase_order/tags/po_item_table.html +0 -0
  331. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_create.html +0 -0
  332. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_delete.html +0 -0
  333. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_list.html +0 -0
  334. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/service_update.html +0 -0
  335. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/service/tags/services_table.html +0 -0
  336. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/transactions/tags/txs_table.html +0 -0
  337. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_create.html +0 -0
  338. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_detail.html +0 -0
  339. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_list.html +0 -0
  340. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/unit/unit_update.html +0 -0
  341. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/tags/uom_table.html +0 -0
  342. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_create.html +0 -0
  343. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_delete.html +0 -0
  344. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_list.html +0 -0
  345. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/uom/uom_update.html +0 -0
  346. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/includes/card_vendor.html +0 -0
  347. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_create.html +0 -0
  348. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_list.html +0 -0
  349. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templates/django_ledger/vendor/vendor_update.html +0 -0
  350. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/templatetags/__init__.py +0 -0
  351. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/__init__.py +0 -0
  352. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/base.py +0 -0
  353. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/bdd/__init__.py +0 -0
  354. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/bdd/features/steps/README.py +0 -0
  355. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_accounts.py +0 -0
  356. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_auth.py +0 -0
  357. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_bill.py +0 -0
  358. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_chart_of_accounts.py +0 -0
  359. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_closing_entry.py +0 -0
  360. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_entity.py +0 -0
  361. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io.py +0 -0
  362. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io_ofx/__init__.py +0 -0
  363. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_io_ofx/tests.py +0 -0
  364. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_purchase_order.py +0 -0
  365. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/tests/test_transactions.py +0 -0
  366. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/account.py +0 -0
  367. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/auth.py +0 -0
  368. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/bank_account.py +0 -0
  369. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/bill.py +0 -0
  370. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/chart_of_accounts.py +0 -0
  371. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/closing_entry.py +0 -0
  372. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/djl_api.py +0 -0
  373. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/entity.py +0 -0
  374. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/estimate.py +0 -0
  375. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/feedback.py +0 -0
  376. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/financial_statement.py +0 -0
  377. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/home.py +0 -0
  378. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/inventory.py +0 -0
  379. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/invoice.py +0 -0
  380. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/item.py +0 -0
  381. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/journal_entry.py +0 -0
  382. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/ledger.py +0 -0
  383. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/purchase_order.py +0 -0
  384. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/transactions.py +0 -0
  385. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/urls/unit.py +0 -0
  386. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/utils.py +0 -0
  387. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/account.py +0 -0
  388. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/auth.py +0 -0
  389. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/bank_account.py +0 -0
  390. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/bill.py +0 -0
  391. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/chart_of_accounts.py +0 -0
  392. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/closing_entry.py +0 -0
  393. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/djl_api.py +0 -0
  394. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/entity.py +0 -0
  395. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/estimate.py +0 -0
  396. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/feedback.py +0 -0
  397. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/financial_statement.py +0 -0
  398. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/home.py +0 -0
  399. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/inventory.py +0 -0
  400. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/invoice.py +0 -0
  401. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/item.py +0 -0
  402. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/journal_entry.py +0 -0
  403. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/ledger.py +0 -0
  404. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/purchase_order.py +0 -0
  405. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/transactions.py +0 -0
  406. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger/views/unit.py +0 -0
  407. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/dependency_links.txt +0 -0
  408. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/requires.txt +0 -0
  409. {django_ledger-0.8.0 → django_ledger-0.8.1}/django_ledger.egg-info/top_level.txt +0 -0
  410. {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.0
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>
@@ -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.0'
9
+ __version__ = '0.8.1'
10
10
  __license__ = 'GPLv3 License'
11
11
 
12
12
  __author__ = 'Miguel Sanda'
@@ -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 TextInput, Select, ModelForm, ChoiceField, ValidationError, CheckboxInput, HiddenInput
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(attrs={
69
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
70
- 'placeholder': _('Alpha Numeric (auto generated if not provided)...')
71
- }),
72
- 'name': TextInput(attrs={
73
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
74
- 'placeholder': _('Account Name...')
75
- }),
76
- 'role': Select(attrs={
77
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
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
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
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(required=True,
102
- label=_('Position'),
103
- widget=Select(attrs={
104
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
105
- }))
106
- _ref_node_id = ChoiceField(required=False,
107
- label=_('Relative to'),
108
- widget=Select(attrs={
109
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
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
- """ Creates a tree-like list of choices """
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
- 'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
152
- }),
153
- 'balance_type': Select(attrs={
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
+ )