monopyly 1.4.5__tar.gz → 1.4.6__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.
Files changed (205) hide show
  1. {monopyly-1.4.5 → monopyly-1.4.6}/PKG-INFO +3 -3
  2. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/_version.py +2 -2
  3. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/actions.py +29 -2
  4. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/routes.py +2 -5
  5. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/statements.py +21 -1
  6. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/css/style.css +4 -0
  7. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/auth/login.html +1 -1
  8. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/auth/register.html +1 -1
  9. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_summary.html +1 -1
  10. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/transaction_form.html +1 -1
  11. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_graphic/card_back.html +1 -1
  12. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/statement_summary.html +3 -3
  13. {monopyly-1.4.5 → monopyly-1.4.6}/pyproject.toml +2 -2
  14. {monopyly-1.4.5 → monopyly-1.4.6}/.gitignore +0 -0
  15. {monopyly-1.4.5 → monopyly-1.4.6}/COPYING +0 -0
  16. {monopyly-1.4.5 → monopyly-1.4.6}/LICENSE +0 -0
  17. {monopyly-1.4.5 → monopyly-1.4.6}/README.md +0 -0
  18. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/README.md +0 -0
  19. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/__init__.py +0 -0
  20. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/auth/actions.py +0 -0
  21. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/auth/blueprint.py +0 -0
  22. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/auth/routes.py +0 -0
  23. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/auth/tools.py +0 -0
  24. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/accounts.py +0 -0
  25. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/actions.py +0 -0
  26. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/banks.py +0 -0
  27. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/blueprint.py +0 -0
  28. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/filters.py +0 -0
  29. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/forms.py +0 -0
  30. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/routes.py +0 -0
  31. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/banking/transactions.py +0 -0
  32. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/cli/apps.py +0 -0
  33. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/cli/run.py +0 -0
  34. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/forms/__init__.py +0 -0
  35. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/forms/_forms.py +10 -10
  36. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/forms/fields.py +0 -0
  37. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/forms/utils.py +0 -0
  38. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/forms/validators.py +0 -0
  39. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/transactions.py +0 -0
  40. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/common/utils.py +0 -0
  41. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/config/__init__.py +0 -0
  42. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/config/default_settings.py +0 -0
  43. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/config/settings.py +0 -0
  44. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/actions.py +0 -0
  45. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/blueprint.py +0 -0
  46. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/context_processors.py +0 -0
  47. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/filters.py +0 -0
  48. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/internal_transactions.py +0 -0
  49. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/core/routes.py +0 -0
  50. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/accounts.py +0 -0
  51. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/blueprint.py +0 -0
  52. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/cards.py +0 -0
  53. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/forms.py +0 -0
  54. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/transactions/__init__.py +0 -0
  55. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/credit/transactions/_transactions.py +0 -0
  56. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/database/__init__.py +0 -0
  57. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/database/models.py +0 -0
  58. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/database/preloads.sql +0 -0
  59. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/database/schema.sql +0 -0
  60. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/database/views.sql +0 -0
  61. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/browserconfig.xml +0 -0
  62. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-114.png +0 -0
  63. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-120.png +0 -0
  64. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-144.png +0 -0
  65. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-150.png +0 -0
  66. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-152.png +0 -0
  67. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-16.png +0 -0
  68. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-160.png +0 -0
  69. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-180.png +0 -0
  70. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-192.png +0 -0
  71. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-310.png +0 -0
  72. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-32.png +0 -0
  73. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-57.png +0 -0
  74. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-60.png +0 -0
  75. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-64.png +0 -0
  76. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-70.png +0 -0
  77. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-72.png +0 -0
  78. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-76.png +0 -0
  79. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon-96.png +0 -0
  80. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon.ico +0 -0
  81. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/favicon/favicon.png +0 -0
  82. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/bank-account-details.png +0 -0
  83. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/bank-account-summaries.png +0 -0
  84. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/bank-accounts.png +0 -0
  85. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/credit-account-details.png +0 -0
  86. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/credit-transactions.png +0 -0
  87. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/homepage-user.png +0 -0
  88. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/homepage.png +0 -0
  89. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/about/statement-details.png +0 -0
  90. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/cards/chase-card.png +0 -0
  91. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/cards/discover-card.png +0 -0
  92. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/cards/new-card.png +0 -0
  93. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/cards/template-card.png +0 -0
  94. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/arrow-down.png +0 -0
  95. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/arrow-left.png +0 -0
  96. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/arrow-up.png +0 -0
  97. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/checkmark.png +0 -0
  98. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/delete-orange-thick.png +0 -0
  99. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/delete-orange.png +0 -0
  100. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/delete-thick.png +0 -0
  101. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/delete.png +0 -0
  102. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/edit.png +0 -0
  103. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/link.png +0 -0
  104. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/minus-thick.png +0 -0
  105. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/minus.png +0 -0
  106. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/plus-thick.png +0 -0
  107. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/plus.png +0 -0
  108. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/refresh.png +0 -0
  109. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/save.png +0 -0
  110. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/sort-asc.png +0 -0
  111. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/sort-desc.png +0 -0
  112. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/statement-pair.svg +0 -0
  113. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/statement.png +0 -0
  114. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/statement.svg +0 -0
  115. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/icons/x-thick.png +0 -0
  116. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/img/statement.png +0 -0
  117. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/jquery-3.7.0.min.js +0 -0
  118. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/add-subtransaction.js +0 -0
  119. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/add-transfer.js +0 -0
  120. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/autocomplete-transaction.js +0 -0
  121. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/bind-tag-actions.js +0 -0
  122. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/create-balance-chart.js +0 -0
  123. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/define-filter.js +0 -0
  124. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/display-new-account-type-inputs.js +0 -0
  125. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/display-new-bank-inputs.js +0 -0
  126. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/display-new-credit-account-inputs.js +0 -0
  127. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/expand-bank-account.js +0 -0
  128. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/expand-bank.js +0 -0
  129. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/expand-transaction.js +0 -0
  130. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/flip-card.js +0 -0
  131. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/hide-homepage-block.js +0 -0
  132. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/infer-card.js +0 -0
  133. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/infer-statement.js +0 -0
  134. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/make-payment.js +0 -0
  135. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/ajax.js +0 -0
  136. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/autocomplete-input.js +0 -0
  137. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/expand-box-row.js +0 -0
  138. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/expand-transaction.js +0 -0
  139. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/manage-acquisition-form.js +0 -0
  140. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/manage-overlays.js +0 -0
  141. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/manage-subforms.js +0 -0
  142. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/update-database-widget.js +0 -0
  143. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/modules/update-display-ajax.js +0 -0
  144. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/show-linked-transaction.js +0 -0
  145. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-account-statement-parameters.js +0 -0
  146. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-bank-name.js +0 -0
  147. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-card-status.js +0 -0
  148. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-statement-parameters.js +0 -0
  149. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-statements-display.js +0 -0
  150. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/static/js/update-transactions-display.js +0 -0
  151. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_form/account_form.html +0 -0
  152. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_form/account_form_page_new.html +0 -0
  153. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_page.html +0 -0
  154. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_summaries.html +0 -0
  155. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/account_summaries_page.html +0 -0
  156. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/accounts_page.html +0 -0
  157. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/bank_info_form.html +0 -0
  158. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/transaction_form_page.html +0 -0
  159. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/transaction_form_page_new.html +0 -0
  160. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/transaction_form_page_update.html +0 -0
  161. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transaction_form/transfer_form.html +0 -0
  162. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transactions_table/condensed_row_content.html +0 -0
  163. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transactions_table/expanded_row_content.html +0 -0
  164. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transactions_table/transaction_field_titles.html +0 -0
  165. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/banking/transactions_table/transactions.html +0 -0
  166. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/form_page.html +0 -0
  167. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transaction_form/subform.html +0 -0
  168. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transaction_form/subtransaction_subform.html +0 -0
  169. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transaction_form/transaction_form_page.html +0 -0
  170. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/linked_bank_transaction.html +0 -0
  171. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/linked_credit_transaction.html +0 -0
  172. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/linked_transaction_overlay.html +0 -0
  173. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/subtransactions.html +0 -0
  174. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/transaction_condensed.html +0 -0
  175. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/transaction_expanded.html +0 -0
  176. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/common/transactions_table/transactions.html +0 -0
  177. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/account_page.html +0 -0
  178. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_form/card_form.html +0 -0
  179. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_form/card_form_page_new.html +0 -0
  180. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_form/transfer_statement_inquiry.html +0 -0
  181. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_graphic/card_front.html +0 -0
  182. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/card_submission_page.html +0 -0
  183. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/cards.html +0 -0
  184. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/cards_page.html +0 -0
  185. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/statement_page.html +0 -0
  186. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/statements.html +0 -0
  187. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/statements_page.html +0 -0
  188. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/tag_tree/subtag_tree.html +0 -0
  189. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/tag_tree/tag_tree.html +0 -0
  190. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/tags_page.html +0 -0
  191. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transaction_form/transaction_form.html +0 -0
  192. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transaction_form/transaction_form_page.html +0 -0
  193. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transaction_form/transaction_form_page_new.html +0 -0
  194. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transaction_form/transaction_form_page_update.html +0 -0
  195. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transaction_submission_page.html +0 -0
  196. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transactions_page.html +0 -0
  197. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transactions_table/condensed_row_content.html +0 -0
  198. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transactions_table/expanded_row_content.html +0 -0
  199. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transactions_table/transaction_field_titles.html +0 -0
  200. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credit/transactions_table/transactions.html +0 -0
  201. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/credits.html +0 -0
  202. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/index.html +0 -0
  203. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/layout.html +0 -0
  204. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/profile.html +0 -0
  205. {monopyly-1.4.5 → monopyly-1.4.6}/monopyly/templates/story.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: monopyly
3
- Version: 1.4.5
3
+ Version: 1.4.6
4
4
  Summary: A homemade personal finance manager.
5
5
  Project-URL: Download, https://pypi.org/project/monopyly
6
6
  Project-URL: Homepage, http://monopyly.com
@@ -25,9 +25,9 @@ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
25
25
  Requires-Python: <3.11,>=3.10
26
26
  Requires-Dist: authanor==1.1.0
27
27
  Requires-Dist: flask-wtf==1.2.1
28
- Requires-Dist: flask==3.0.2
28
+ Requires-Dist: flask==3.0.3
29
29
  Requires-Dist: fuisce==1.0.2
30
- Requires-Dist: gunicorn==21.2.0
30
+ Requires-Dist: gunicorn==22.0.0
31
31
  Requires-Dist: markdown==3.6
32
32
  Requires-Dist: python-dateutil==2.9.0
33
33
  Requires-Dist: rich==13.7.1
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '1.4.5'
4
- __version_tuple__ = version_tuple = (1, 4, 5)
3
+ __version__ = version = '1.4.6'
4
+ __version_tuple__ = version_tuple = (1, 4, 6)
@@ -13,7 +13,7 @@ def get_card_statement_grouping(cards):
13
13
 
14
14
  Parameters
15
15
  ----------
16
- cards : list of sqlite3.Row
16
+ cards : list of database.models.CreditCard
17
17
  The database card entries for which to get statements.
18
18
 
19
19
  Returns
@@ -31,6 +31,33 @@ def get_card_statement_grouping(cards):
31
31
  return card_statements
32
32
 
33
33
 
34
+ def get_statement_and_transactions(statement_id, transaction_sort_order="DESC"):
35
+ """
36
+ Given a statement ID, get the corresponding statement and transactions.
37
+
38
+ Parameters
39
+ ----------
40
+ statement_id : int
41
+ The ID of the statement to acquire.
42
+ transaction_sort_order : str
43
+ The order to sort transactions returned for the statement. The
44
+ default is 'DESC' for transactions sorted in descending order.
45
+
46
+ Returns
47
+ -------
48
+ statement : database.models.CreditStatementView
49
+ The statement with the given ID.
50
+ transactions : list of database.models.CreditTransactionView
51
+ All transactions on the statement with the given ID.
52
+ """
53
+ statement = CreditStatementHandler.get_entry(statement_id)
54
+ transactions = CreditTransactionHandler.get_transactions(
55
+ statement_ids=(statement_id,),
56
+ sort_order=transaction_sort_order,
57
+ )
58
+ return statement, transactions.all()
59
+
60
+
34
61
  def get_potential_preceding_card(card):
35
62
  """
36
63
  Get the card that this new card may be intended to replace (if any).
@@ -42,7 +69,7 @@ def get_potential_preceding_card(card):
42
69
 
43
70
  Parameters
44
71
  ----------
45
- card : sqlite3.Row
72
+ card : database.models.CreditCard
46
73
  The new card being added to the database.
47
74
 
48
75
  Returns
@@ -22,6 +22,7 @@ from .accounts import CreditAccountHandler
22
22
  from .actions import (
23
23
  get_card_statement_grouping,
24
24
  get_potential_preceding_card,
25
+ get_statement_and_transactions,
25
26
  make_payment,
26
27
  transfer_credit_card_statement,
27
28
  )
@@ -177,11 +178,7 @@ def update_statements_display():
177
178
  @bp.route("/statement/<int:statement_id>")
178
179
  @login_required
179
180
  def load_statement_details(statement_id):
180
- statement = CreditStatementHandler.get_entry(statement_id)
181
- transactions = CreditTransactionHandler.get_transactions(
182
- statement_ids=(statement_id,),
183
- sort_order="DESC",
184
- )
181
+ statement, transactions = get_statement_and_transactions(statement_id)
185
182
  # Get bank accounts for potential payments
186
183
  bank_accounts = BankAccountHandler.get_accounts()
187
184
  return render_template(
@@ -3,6 +3,7 @@ Tools for interacting with the credit statements in the database.
3
3
  """
4
4
 
5
5
  from authanor.database.handler import DatabaseViewHandler
6
+ from dateutil.relativedelta import relativedelta
6
7
 
7
8
  from ..common.utils import get_next_occurrence_of_day
8
9
  from ..database.models import (
@@ -136,7 +137,7 @@ class CreditStatementHandler(
136
137
 
137
138
  Returns
138
139
  -------
139
- statement : database.models.CreditStatementView
140
+ statement : database.models.CreditStatement
140
141
  The inferred statement entry for the transaction.
141
142
  """
142
143
  issue_day = card.account.statement_issue_day
@@ -146,6 +147,25 @@ class CreditStatementHandler(
146
147
  statement = cls.add_statement(card, issue_date)
147
148
  return statement
148
149
 
150
+ @classmethod
151
+ @DatabaseViewHandler.view_query
152
+ def get_prior_statement(cls, statement):
153
+ """
154
+ Given a statement, get the immediately preceding statement.
155
+
156
+ Parameters
157
+ ----------
158
+ statement : database.models.CreditStatement
159
+ The statement for which to find the preceding statement.
160
+
161
+ Returns
162
+ -------
163
+ statement : database.models.CreditStatementView
164
+ The statement immediately preceding the given statement.
165
+ """
166
+ issue_date = statement.issue_date + relativedelta(months=-1)
167
+ return cls.find_statement(statement.card.id, issue_date=issue_date)
168
+
149
169
  @classmethod
150
170
  def add_statement(cls, card, issue_date, due_date=None):
151
171
  """Add a statement to the database."""
@@ -1664,6 +1664,10 @@ form .autocomplete-box .item.active {
1664
1664
  text-align: center;
1665
1665
  }
1666
1666
 
1667
+ .details .summary-box .balance .dollar-sign {
1668
+ margin-right: 5px;
1669
+ }
1670
+
1667
1671
  .details .summary-box .projected-balance .amount {
1668
1672
  color: var(--moneytree);
1669
1673
  font-weight: 500;
@@ -10,6 +10,6 @@
10
10
  <input name="username" id="username" required>
11
11
  <label for="password">Password</label>
12
12
  <input type="password" name="password" id="password" required>
13
- <input class="button" type="submit" value="Log In">
13
+ <input class="button" type="submit" value="Log In" />
14
14
  </form>
15
15
  {% endblock %}
@@ -10,6 +10,6 @@
10
10
  <input name="username" id="username" required>
11
11
  <label for="password">Password</label>
12
12
  <input type="password" name="password" id="password" required>
13
- <input class="button" type="submit" value="Register">
13
+ <input class="button" type="submit" value="Register" />
14
14
  </form>
15
15
  {% endblock %}
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
12
+ <div class="dollar-sign">$</div>
13
13
  <div>{{ account.balance|currency }}</div>
14
14
  </div>
15
15
 
@@ -1,4 +1,4 @@
1
- <form id="bank-transaction" class="transaction" action="{{ submission_url }}" method="POST" autocomplete="off">
1
+ <form id="bank-transaction" class="transaction" action="{{ submission_url }}" method="post" autocomplete="off">
2
2
 
3
3
  {{ form.hidden_tag() }}
4
4
 
@@ -10,7 +10,7 @@
10
10
  <div class="options">
11
11
 
12
12
  <label class="toggle-switch-gadget" for="card-{{ card.id }}-status">
13
- <input id="card-{{ card.id }}-status" data-card-id="{{ card.id }}" type="checkbox" {{ 'checked' if card.active else '' }}/>
13
+ <input id="card-{{ card.id }}-status" data-card-id="{{ card.id }}" type="checkbox"{{ ' checked' if card.active else '' }} />
14
14
 
15
15
  <div class="option">
16
16
  <div class="text">
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
12
+ <div class="dollar-sign">$</div>
13
13
  <div>{{ statement.balance|currency }}</div>
14
14
  </div>
15
15
 
@@ -47,8 +47,8 @@
47
47
 
48
48
  <div class="form-line">
49
49
  <div class="dollar-sign">$</div>
50
- <input id="pay-amount" type="text" name="pay_amount" value="{{ statement.balance|currency }}" maxlength="8"/>
51
- <input id="pay-date" type="text" name="pay_date" value="{{ date_today }}" maxlength="10"/>
50
+ <input id="pay-amount" type="text" name="pay_amount" value="{{ statement.balance|currency }}" maxlength="8" />
51
+ <input id="pay-date" type="text" name="pay_date" value="{{ date_today }}" maxlength="10" />
52
52
  </div>
53
53
 
54
54
  <div class="form-line">
@@ -12,10 +12,10 @@ license = { text = 'GNU GPLv3' }
12
12
  requires-python = '>=3.10,<3.11'
13
13
  dependencies = [
14
14
  'authanor==1.1.0',
15
- 'Flask==3.0.2',
15
+ 'Flask==3.0.3',
16
16
  'Flask-WTF==1.2.1',
17
17
  'fuisce==1.0.2',
18
- 'gunicorn==21.2.0',
18
+ 'gunicorn==22.0.0',
19
19
  'Markdown==3.6',
20
20
  'python-dateutil==2.9.0',
21
21
  'rich==13.7.1',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -34,16 +34,6 @@ class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
34
34
  """
35
35
  Generate a duplicate prepopulated form.
36
36
 
37
- Notes
38
- -----
39
- WTForms requires that a form be instantiated in order to be
40
- able to properly introspect fields. Because of this, this method
41
- will only return a duplicate form matching the type of the
42
- form instance used to call it. Using the form's process method
43
- will not properly handle enumeration of field lists, so it
44
- can not be used as a replacement for populating an existing
45
- form.
46
-
47
37
  Parameters
48
38
  ----------
49
39
  entry : database.models.Model
@@ -55,6 +45,16 @@ class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
55
45
  form : EntryForm
56
46
  A duplicate form, prepopulated with the collected database
57
47
  information.
48
+
49
+ Notes
50
+ -----
51
+ WTForms requires that a form be instantiated in order to be
52
+ able to properly introspect fields. Because of this, this method
53
+ will only return a duplicate form matching the type of the
54
+ form instance used to call it. Using the form's process method
55
+ will not properly handle enumeration of field lists, so it
56
+ can not be used as a replacement for populating an existing
57
+ form.
58
58
  """
59
59
  data = self.gather_entry_data(entry)
60
60
  return self.__class__(data=data)