monopyly 1.6.0__tar.gz → 1.6.2__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.
- {monopyly-1.6.0 → monopyly-1.6.2}/PKG-INFO +6 -6
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/CHANGELOG.md +15 -0
- monopyly-1.6.2/monopyly/_version.py +34 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/forms.py +4 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/forms/_forms.py +5 -14
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/forms/fields.py +0 -9
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/forms/utils.py +3 -3
- monopyly-1.6.2/monopyly/core/context_processors.py +23 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/cards.py +1 -1
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/forms.py +6 -2
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/activity/parser.py +1 -1
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/css/style.css +4 -0
- monopyly-1.6.2/monopyly/static/js/bind-tag-actions.js +211 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/highlight-discrepant-transactions.js +1 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_form/account_form_page_new.html +10 -8
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/accounts_page.html +8 -6
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/tag_tree.html +4 -1
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/tags_page.html +15 -13
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/index.html +12 -8
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/profile.html +18 -19
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/account_page.html +17 -17
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_form/card_form_page_new.html +8 -5
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_page.html +43 -44
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statements_page.html +13 -13
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_page.html +28 -28
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/layout.html +7 -5
- {monopyly-1.6.0 → monopyly-1.6.2}/pyproject.toml +6 -6
- monopyly-1.6.0/monopyly/_version.py +0 -16
- monopyly-1.6.0/monopyly/core/context_processors.py +0 -41
- monopyly-1.6.0/monopyly/static/js/bind-tag-actions.js +0 -123
- {monopyly-1.6.0 → monopyly-1.6.2}/.gitignore +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/COPYING +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/LICENSE +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/README.md +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/README.md +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/__init__.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/auth/actions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/auth/blueprint.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/auth/routes.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/auth/tools.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/accounts.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/actions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/banks.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/blueprint.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/filters.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/routes.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/banking/transactions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/forms/__init__.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/forms/validators.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/transactions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/common/utils.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/actions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/blueprint.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/errors.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/filters.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/internal_transactions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/core/routes.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/accounts.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/actions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/blueprint.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/routes.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/statements.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/__init__.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/_transactions.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/activity/__init__.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/activity/data.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/credit/transactions/activity/reconciliation.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/database/__init__.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/database/models.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/database/preloads.sql +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/database/schema.sql +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/database/views.sql +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/scripts/screenshot_application.py +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/chartist-1.5.0.min.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/browserconfig.xml +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-114.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-120.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-144.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-150.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-152.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-16.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-160.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-180.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-192.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-310.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-32.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-57.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-60.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-64.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-70.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-72.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-76.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon-96.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon.ico +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/favicon/favicon.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/bank-account-details.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/bank-account-summaries.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/bank-accounts.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/credit-account-details.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/credit-statement-details.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/credit-transactions.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/homepage-user.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/homepage.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/about/statement-details.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/cards/chase-card.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/cards/discover-card.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/cards/new-card.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/cards/template-card.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/arrow-down.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/arrow-left.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/arrow-up.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/checkmark.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/delete-orange-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/delete-orange.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/delete-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/delete.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/edit.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/link.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/minus-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/minus.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/plus-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/plus.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/refresh.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/save.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/sort-asc.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/sort-desc.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/statement-pair.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/statement-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/statement.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/icons/x-thick.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/img/statement.png +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/jquery-3.7.1.min.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/add-subtransaction.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/add-transfer.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/autocomplete-transaction.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/create-balance-chart.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/create-category-chart.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/define-filter.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/display-new-account-type-inputs.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/display-new-bank-inputs.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/display-new-credit-account-inputs.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/expand-bank-account.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/expand-bank.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/expand-transaction.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/flip-card.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/hide-homepage-block.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/infer-card.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/infer-statement.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/load-more-transactions.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/make-payment.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/ajax.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/autocomplete-input.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/expand-box-row.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/expand-transaction.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/form-suggestions.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/manage-acquisition-form.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/manage-overlays.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/manage-subforms.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/update-database-widget.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/modules/update-display-ajax.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/show-credit-activity-loader.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/show-linked-transaction.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/toggle-navigation.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-account-statement-parameters.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-bank-name.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-card-status.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-statement-parameters.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-statements-display.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/update-transactions-display.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/use-suggested-amount.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/static/js/use-suggested-merchant.js +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/auth/change_password.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/auth/login.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/auth/register.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_form/account_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_page.html +24 -24
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_summaries.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_summaries_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_summary.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/bank_info_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/transaction_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/transaction_form_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/transaction_form_page_new.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/transaction_form_page_update.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transaction_form/transfer_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transactions_table/condensed_row_content.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transactions_table/expanded_row_content.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transactions_table/table.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transactions_table/transaction_field_titles.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/transactions_table/transactions.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/form_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transaction_form/subform.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transaction_form/subtransaction_subform.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transaction_form/transaction_form_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/linked_bank_transaction.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/linked_credit_transaction.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/linked_transaction_overlay.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/subtransactions.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/table.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/transaction_condensed.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/transaction_expanded.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/common/transactions_table/transactions.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/credits.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/400.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/401.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/403.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/404.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/405.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/408.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/418.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/425.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/500.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/errors/error.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/core/story.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_form/card_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_form/transfer_statement_inquiry.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_graphic/card_back.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_graphic/card_front.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/card_submission_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/cards.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/cards_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_reconciliation/discrepant_records.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_reconciliation/statement_reconciliation_inquiry.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_reconciliation/statement_reconciliation_page.html +19 -19
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_reconciliation/summary.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_reconciliation/unrecorded_activities.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statement_summary.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/statements.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transaction_form/transaction_form.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transaction_form/transaction_form_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transaction_form/transaction_form_page_new.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transaction_form/transaction_form_page_update.html +9 -9
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transaction_submission_page.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_table/condensed_row_content.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_table/expanded_row_content.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_table/table.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_table/transaction_field_titles.html +0 -0
- {monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/credit/transactions_table/transactions.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monopyly
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
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
|
|
@@ -23,15 +23,15 @@ Classifier: Topic :: Office/Business :: Financial
|
|
|
23
23
|
Classifier: Topic :: Office/Business :: Financial :: Accounting
|
|
24
24
|
Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
|
|
25
25
|
Requires-Python: >=3.10
|
|
26
|
-
Requires-Dist: dry-foundation==1.
|
|
26
|
+
Requires-Dist: dry-foundation==1.6.2
|
|
27
27
|
Requires-Dist: flask-wtf==1.2.2
|
|
28
28
|
Requires-Dist: flask==3.1.2
|
|
29
|
-
Requires-Dist: gunicorn==
|
|
30
|
-
Requires-Dist: markdown==3.
|
|
29
|
+
Requires-Dist: gunicorn==25.0.1
|
|
30
|
+
Requires-Dist: markdown==3.10.1
|
|
31
31
|
Requires-Dist: nltk==3.9.2
|
|
32
32
|
Requires-Dist: python-dateutil==2.9.0
|
|
33
|
-
Requires-Dist: rich==14.
|
|
34
|
-
Requires-Dist: sqlalchemy==2.0.
|
|
33
|
+
Requires-Dist: rich==14.3.2
|
|
34
|
+
Requires-Dist: sqlalchemy==2.0.46
|
|
35
35
|
Description-Content-Type: text/markdown
|
|
36
36
|
|
|
37
37
|
<div id="header">
|
|
@@ -237,4 +237,19 @@
|
|
|
237
237
|
- Update JavaScript libraries (jQuery, Chartist)
|
|
238
238
|
|
|
239
239
|
|
|
240
|
+
### 1.6.1
|
|
241
|
+
|
|
242
|
+
- Allow pie chart labels to overflow the SVG container
|
|
243
|
+
- Define JavaScript elements in header (deferring execution when logical)
|
|
244
|
+
- Bump dependencies
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
### 1.6.2
|
|
248
|
+
|
|
249
|
+
- Fix bug in the transaction tag tree template preventing new subtags in the same subtag subtree
|
|
250
|
+
- Refactor JavaScript used to manage the transaction tag tree
|
|
251
|
+
- Add specificity to the reconciliation tool when parsing payment columns (when otherwise unidentified, payment transactions are determined by the presence of the isolated word "payment" in the description field)
|
|
252
|
+
- Bump dependencies
|
|
253
|
+
|
|
254
|
+
|
|
240
255
|
<a name="bottom" id="bottom"></a>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
TYPE_CHECKING = False
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from typing import Tuple
|
|
16
|
+
from typing import Union
|
|
17
|
+
|
|
18
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
20
|
+
else:
|
|
21
|
+
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
23
|
+
|
|
24
|
+
version: str
|
|
25
|
+
__version__: str
|
|
26
|
+
__version_tuple__: VERSION_TUPLE
|
|
27
|
+
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
30
|
+
|
|
31
|
+
__version__ = version = '1.6.2'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 6, 2)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = None
|
|
@@ -115,6 +115,10 @@ class BankAccountForm(EntryForm):
|
|
|
115
115
|
}
|
|
116
116
|
return account_type_data
|
|
117
117
|
|
|
118
|
+
def gather_entry_data(self, entry):
|
|
119
|
+
"""Gather data for the form from the given database entry."""
|
|
120
|
+
raise NotImplementedError
|
|
121
|
+
|
|
118
122
|
# Fields to identify the bank/account type information for the account
|
|
119
123
|
bank_info = FormField(BankSubform)
|
|
120
124
|
account_type_info = FormField(AccountTypeSubform)
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
General form constructions.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from abc import
|
|
5
|
+
from abc import abstractmethod
|
|
6
6
|
from datetime import date
|
|
7
7
|
|
|
8
|
-
from
|
|
8
|
+
from dry_foundation.forms import AbstractFlaskForm, FlaskSubform
|
|
9
9
|
from wtforms.fields import StringField, SubmitField
|
|
10
10
|
from wtforms.validators import DataRequired
|
|
11
11
|
|
|
@@ -15,12 +15,7 @@ from .fields import CurrencyField, DateField
|
|
|
15
15
|
form_err_msg = "There was an improper value in your form. Please try again."
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class
|
|
19
|
-
# Defined to allow the forms to also to be abstract base classes
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
|
|
18
|
+
class EntryForm(AbstractFlaskForm):
|
|
24
19
|
"""
|
|
25
20
|
A form designed to accept database entry information.
|
|
26
21
|
|
|
@@ -85,11 +80,8 @@ class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
|
|
|
85
80
|
)
|
|
86
81
|
|
|
87
82
|
|
|
88
|
-
class EntrySubform(EntryForm):
|
|
89
|
-
"""
|
|
90
|
-
|
|
91
|
-
def __init__(self, *args, **kwargs):
|
|
92
|
-
super().__init__(meta={"csrf": False}, *args, **kwargs)
|
|
83
|
+
class EntrySubform(FlaskSubform, EntryForm):
|
|
84
|
+
"""A subform implementing ``EntryForm`` behavior."""
|
|
93
85
|
|
|
94
86
|
|
|
95
87
|
class AcquisitionSubform(EntrySubform):
|
|
@@ -149,7 +141,6 @@ class TransactionForm(EntryForm):
|
|
|
149
141
|
}
|
|
150
142
|
return data
|
|
151
143
|
|
|
152
|
-
@abstractmethod
|
|
153
144
|
def gather_entry_data(self, entry):
|
|
154
145
|
if self.subtransaction_model is None:
|
|
155
146
|
raise RuntimeError(
|
|
@@ -24,15 +24,6 @@ class DateField(wtforms_fields.DateField):
|
|
|
24
24
|
super().__init__(*args, filters=filters, **kwargs)
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
class OptionalDateField(DateField):
|
|
28
|
-
"""A date field where the field value is optional."""
|
|
29
|
-
|
|
30
|
-
def process_formdata(self, valuelist):
|
|
31
|
-
"""Process data from the form, ignoring an ommitted value."""
|
|
32
|
-
if valuelist != [""]:
|
|
33
|
-
super().process_formdata(valuelist)
|
|
34
|
-
|
|
35
|
-
|
|
36
27
|
class CurrencyField(wtforms_fields.DecimalField):
|
|
37
28
|
"""A decimal field with currency-specific customizations."""
|
|
38
29
|
|
|
@@ -113,9 +113,9 @@ def extend_field_list_for_ajax(form_class, field_list_name, field_list_count):
|
|
|
113
113
|
|
|
114
114
|
Parameters
|
|
115
115
|
----------
|
|
116
|
-
form_class :
|
|
117
|
-
The class (not class instance) containing the field list to
|
|
118
|
-
extended.
|
|
116
|
+
form_class : type
|
|
117
|
+
The form class (not class instance) containing the field list to
|
|
118
|
+
be extended.
|
|
119
119
|
field_list_name : str
|
|
120
120
|
The name of the field list to be extended.
|
|
121
121
|
field_list_count : int
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Filters defined for the application.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from dry_foundation.utils import define_basic_template_global_variables
|
|
6
|
+
|
|
7
|
+
from .actions import determine_summary_balance_svg_viewbox_width
|
|
8
|
+
from .blueprint import bp
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@bp.app_context_processor
|
|
12
|
+
def inject_global_template_variables():
|
|
13
|
+
"""Inject template variables globally into the template context."""
|
|
14
|
+
return define_basic_template_global_variables("monopyly._version")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@bp.app_context_processor
|
|
18
|
+
def inject_utility_functions():
|
|
19
|
+
"""Inject utility functions globally into the template context."""
|
|
20
|
+
utility_functions = {
|
|
21
|
+
"calculate_summary_balance_width": determine_summary_balance_svg_viewbox_width,
|
|
22
|
+
}
|
|
23
|
+
return utility_functions
|
|
@@ -137,7 +137,7 @@ def save_card(form, card_id=None):
|
|
|
137
137
|
|
|
138
138
|
Parameters
|
|
139
139
|
----------
|
|
140
|
-
form :
|
|
140
|
+
form : CreditCardForm
|
|
141
141
|
The form beign used to provide the data being saved.
|
|
142
142
|
card_id : int
|
|
143
143
|
The ID of hte card to be saved. If provided, the named card will
|
|
@@ -5,6 +5,7 @@ Generate credit card forms for the user to complete.
|
|
|
5
5
|
from flask import abort
|
|
6
6
|
from wtforms.fields import (
|
|
7
7
|
BooleanField,
|
|
8
|
+
DateField,
|
|
8
9
|
FieldList,
|
|
9
10
|
FormField,
|
|
10
11
|
IntegerField,
|
|
@@ -18,7 +19,6 @@ from ..common.forms import AcquisitionSubform, EntryForm, EntrySubform, Transact
|
|
|
18
19
|
from ..common.forms.fields import (
|
|
19
20
|
CustomChoiceSelectField,
|
|
20
21
|
LastFourDigitsField,
|
|
21
|
-
OptionalDateField,
|
|
22
22
|
StringField,
|
|
23
23
|
)
|
|
24
24
|
from ..common.forms.utils import Autocompleter
|
|
@@ -152,6 +152,10 @@ class CardStatementTransferForm(EntryForm):
|
|
|
152
152
|
transfer = RadioField("transfer", choices=[("yes", "Yes"), ("no", "No")])
|
|
153
153
|
submit = SubmitField("Continue")
|
|
154
154
|
|
|
155
|
+
def gather_entry_data(self, entry):
|
|
156
|
+
"""Gather data for the form from the given database entry."""
|
|
157
|
+
raise NotImplementedError
|
|
158
|
+
|
|
155
159
|
|
|
156
160
|
class CreditTransactionForm(TransactionForm):
|
|
157
161
|
"""Form to input/edit credit card transactions."""
|
|
@@ -193,7 +197,7 @@ class CreditTransactionForm(TransactionForm):
|
|
|
193
197
|
# Fields to identify the card/bank information for the statement
|
|
194
198
|
card_info = FormField(CardSubform)
|
|
195
199
|
# Fields pertaining to the statement
|
|
196
|
-
issue_date =
|
|
200
|
+
issue_date = DateField("Statement Date", [Optional()])
|
|
197
201
|
|
|
198
202
|
def get_statement(self, transaction_date):
|
|
199
203
|
"""Get the credit card statement described by the form data."""
|
|
@@ -213,7 +213,7 @@ class _TransactionActivityParser:
|
|
|
213
213
|
def _infer_payment_row(row):
|
|
214
214
|
# Infer whether the row constitutes a payment transaction
|
|
215
215
|
contextual_info = [row[i].lower() for i in contextual_column_indices]
|
|
216
|
-
return any("payment" in element for element in contextual_info)
|
|
216
|
+
return any("payment" in element.split() for element in contextual_info)
|
|
217
217
|
|
|
218
218
|
payment_rows = list(filter(_infer_payment_row, raw_data))
|
|
219
219
|
return self._extrapolate_payments_positive(payment_rows, raw_data)
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Add a transaction tag on the 'Transaction Tags' page.
|
|
3
|
+
*
|
|
4
|
+
* Adds a transaction tag under the tag or category corresponding to the
|
|
5
|
+
* plus icon that is clicked. Clicking the plus icon adds a tag shaped
|
|
6
|
+
* input box that accepts a new tag name. Once the input loses focus,
|
|
7
|
+
* an AJAX request is executed, the database is updated and the tree of
|
|
8
|
+
* transactions is partially refreshed to allow further additions. If no
|
|
9
|
+
* tag name was provided, no request occurs.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { executeAjaxRequest } from './modules/ajax.js';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
(function() {
|
|
16
|
+
// Identify the buttons
|
|
17
|
+
const $createTagButtons = $('#transaction-tags .new-tag.button');
|
|
18
|
+
const $deleteTagButtons = $('#transaction-tags .action.button.delete');
|
|
19
|
+
bindTagButtonBehavior($createTagButtons, $deleteTagButtons);
|
|
20
|
+
|
|
21
|
+
})();
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Create the tag manager.
|
|
26
|
+
*
|
|
27
|
+
* @param {JQuery} $createTagButtons - Buttons for adding subtags to one or
|
|
28
|
+
* more tags.
|
|
29
|
+
* @param {JQuery} $deleteTagButtons - Buttons for removing tags.
|
|
30
|
+
*/
|
|
31
|
+
function bindTagButtonBehavior($createTagButtons, $deleteTagButtons) {
|
|
32
|
+
console.log('bind create buttons', $createTagButtons);
|
|
33
|
+
console.log('bind delete buttons', $deleteTagButtons);
|
|
34
|
+
$createTagButtons.on('click', function() {
|
|
35
|
+
const $button = $(this);
|
|
36
|
+
const behavior = new TagCreation($button);
|
|
37
|
+
behavior.perform();
|
|
38
|
+
});
|
|
39
|
+
$deleteTagButtons.on('click', function() {
|
|
40
|
+
const $button = $(this);
|
|
41
|
+
const behavior = new TagDeletion($button);
|
|
42
|
+
behavior.perform();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A class for managing transaction tags and the behavior of their buttons.
|
|
49
|
+
*/
|
|
50
|
+
class TagButtonBehavior {
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Create the tag manager.
|
|
54
|
+
*
|
|
55
|
+
* @param {JQuery} $button - A button belonging to a tag.
|
|
56
|
+
*/
|
|
57
|
+
constructor($button) {
|
|
58
|
+
this.$container = $button.closest('.tag-container');
|
|
59
|
+
this.$tag = this.$container.children('.tag-area').find('.tag');
|
|
60
|
+
this.$tags = this.$container.children('ul.tags');
|
|
61
|
+
this.$input = this.$tags.children('input.new-tag');
|
|
62
|
+
// Set animation parameters
|
|
63
|
+
this.slideTime = 300;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A class for managing transaction tags creation behavior.
|
|
70
|
+
*/
|
|
71
|
+
class TagCreation extends TagButtonBehavior {
|
|
72
|
+
|
|
73
|
+
#endpoint = ADD_TAG_ENDPOINT;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create the tag creator.
|
|
77
|
+
*
|
|
78
|
+
* @param {JQuery} $button - A button belonging to a tag.
|
|
79
|
+
*/
|
|
80
|
+
constructor($button) {
|
|
81
|
+
super($button);
|
|
82
|
+
self = this;
|
|
83
|
+
this.$input.on('blur', function() {
|
|
84
|
+
self.#dropInputFocus();
|
|
85
|
+
});
|
|
86
|
+
this.$input.on('keydown', function() {
|
|
87
|
+
if (event.key == 'Escape') {
|
|
88
|
+
self.#clearInput();
|
|
89
|
+
this.blur();
|
|
90
|
+
} else if (event.key == 'Enter') {
|
|
91
|
+
this.blur();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Perform the behavior.
|
|
98
|
+
*/
|
|
99
|
+
perform() {
|
|
100
|
+
this.#showInput();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Show the input box to collect new tag information.
|
|
105
|
+
*/
|
|
106
|
+
#showInput() {
|
|
107
|
+
console.log('showing input', this.$input);
|
|
108
|
+
self = this;
|
|
109
|
+
this.$input.slideDown(this.slideTime, function() {
|
|
110
|
+
self.$input.addClass('visible');
|
|
111
|
+
self.$input.focus();
|
|
112
|
+
console.log('focus', self.$input);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Perform a specific action when the input loses focus.
|
|
118
|
+
*/
|
|
119
|
+
#dropInputFocus() {
|
|
120
|
+
if (this.$input.val()) {
|
|
121
|
+
this.#createTag();
|
|
122
|
+
this.#hideFilledInput();
|
|
123
|
+
} else {
|
|
124
|
+
this.#hideEmptyInput();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Create the new tag in the database.
|
|
130
|
+
*/
|
|
131
|
+
#createTag() {
|
|
132
|
+
const rawData = {
|
|
133
|
+
'tag_name': this.$input.val(),
|
|
134
|
+
'parent': this.$tag.text()
|
|
135
|
+
};
|
|
136
|
+
// Execute the AJAX request and place the new tag
|
|
137
|
+
executeAjaxRequest(this.#endpoint, rawData, this.#placeNewTag.bind(this));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Add the new tag to the DOM before the input.
|
|
142
|
+
*/
|
|
143
|
+
#placeNewTag(newTagHTML) {
|
|
144
|
+
const $newTag = $(newTagHTML);
|
|
145
|
+
this.$input.before($newTag);
|
|
146
|
+
// Bind behavior functionality to the newly created/placed tag buttons
|
|
147
|
+
bindTagButtonBehavior(
|
|
148
|
+
$newTag.find('.new-tag.button'), $newTag.find('.action.button.delete')
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Hide the input immediately.
|
|
154
|
+
*/
|
|
155
|
+
#hideFilledInput() {
|
|
156
|
+
this.$input.hide();
|
|
157
|
+
this.$input.removeClass('visible');
|
|
158
|
+
this.#clearInput();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Hide the (empty) input gracefully.
|
|
163
|
+
*/
|
|
164
|
+
#hideEmptyInput() {
|
|
165
|
+
this.$input.removeClass('visible');
|
|
166
|
+
this.$input.slideUp(this.slideTime);
|
|
167
|
+
console.log('hiding empty input', this.$input);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Clear the input.
|
|
172
|
+
*/
|
|
173
|
+
#clearInput() {
|
|
174
|
+
this.$input.val('');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* A class for managing transaction tags deletion behavior.
|
|
182
|
+
*/
|
|
183
|
+
class TagDeletion extends TagButtonBehavior {
|
|
184
|
+
|
|
185
|
+
#endpoint = REMOVE_TAG_ENDPOINT;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Perform the behavior.
|
|
189
|
+
*/
|
|
190
|
+
perform() {
|
|
191
|
+
if (this.#confirmDelete()) {
|
|
192
|
+
this.#removeTag();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Remove the tag from the database.
|
|
198
|
+
*/
|
|
199
|
+
#removeTag() {
|
|
200
|
+
const rawData = {'tag_name': this.$tag.html()};
|
|
201
|
+
// Execute the AJAX request to delete the tag
|
|
202
|
+
executeAjaxRequest(this.#endpoint, rawData);
|
|
203
|
+
// Remove the tag from the display
|
|
204
|
+
this.$container.slideUp(this.slideTime, function() {this.remove()});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
#confirmDelete() {
|
|
208
|
+
return confirm('Are you sure you want to delete this tag?');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
}
|
{monopyly-1.6.0 → monopyly-1.6.2}/monopyly/templates/banking/account_form/account_form_page_new.html
RENAMED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
{% extends "common/form_page.html" %}
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
{% block javascript %}
|
|
5
|
+
|
|
6
|
+
<script type="module" src="{{ url_for('static', filename='js/display-new-bank-inputs.js') }}">
|
|
7
|
+
</script>
|
|
8
|
+
<script type="module" src="{{ url_for('static', filename='js/display-new-account-type-inputs.js') }}">
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
{% endblock %}
|
|
12
|
+
|
|
13
|
+
|
|
4
14
|
{% block title %}
|
|
5
15
|
New Bank Account
|
|
6
16
|
{% endblock %}
|
|
@@ -13,11 +23,3 @@
|
|
|
13
23
|
{% endwith %}
|
|
14
24
|
|
|
15
25
|
{% endblock %}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{% block javascript %}
|
|
19
|
-
<script type="module" src="{{ url_for('static', filename='js/display-new-bank-inputs.js') }}">
|
|
20
|
-
</script>
|
|
21
|
-
<script type="module" src="{{ url_for('static', filename='js/display-new-account-type-inputs.js') }}">
|
|
22
|
-
</script>
|
|
23
|
-
{% endblock %}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
{% extends 'layout.html' %}
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
{% block javascript %}
|
|
5
|
+
|
|
6
|
+
<script type="module" src="{{ url_for('static', filename='js/expand-bank-account.js') }}">
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
{% endblock %}
|
|
10
|
+
|
|
11
|
+
|
|
4
12
|
{% block header %}
|
|
5
13
|
|
|
6
14
|
<h1>
|
|
@@ -83,9 +91,3 @@
|
|
|
83
91
|
</div>
|
|
84
92
|
|
|
85
93
|
{% endblock %}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{% block javascript %}
|
|
89
|
-
<script type="module" src="{{ url_for('static', filename='js/expand-bank-account.js') }}">
|
|
90
|
-
</script>
|
|
91
|
-
{% endblock %}
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
</li>
|
|
19
19
|
|
|
20
20
|
{% if loop.last %}
|
|
21
|
-
|
|
21
|
+
{# Do not create a new input for a tag when its subtree is updated #}
|
|
22
|
+
{% if new_tree or loop.depth0 != 0 %}
|
|
23
|
+
<input class="new-tag" type="text" />
|
|
24
|
+
{% endif %}
|
|
22
25
|
{% endif %}
|
|
23
26
|
{% else %}
|
|
24
27
|
<input class="new-tag" type="text" />
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
{% extends 'layout.html' %}
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
{% block javascript %}
|
|
5
|
+
|
|
6
|
+
<script>
|
|
7
|
+
const ADD_TAG_ENDPOINT = "{{ url_for('banking.add_tag') }}";
|
|
8
|
+
const REMOVE_TAG_ENDPOINT = "{{ url_for('banking.delete_tag') }}";
|
|
9
|
+
</script>
|
|
10
|
+
<script type="module" src="{{ url_for('static', filename='js/bind-tag-actions.js') }}">
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
{% endblock %}
|
|
14
|
+
|
|
15
|
+
|
|
4
16
|
{% block header %}
|
|
5
17
|
|
|
6
18
|
<h1>
|
|
@@ -21,7 +33,9 @@
|
|
|
21
33
|
<div id="tags-container" class="tag-container">
|
|
22
34
|
|
|
23
35
|
<ul class="tags">
|
|
24
|
-
{%
|
|
36
|
+
{% with new_tree = True %}
|
|
37
|
+
{% include 'common/tag_tree.html' %}
|
|
38
|
+
{% endwith %}
|
|
25
39
|
</ul>
|
|
26
40
|
|
|
27
41
|
<img class="root new-tag button" src="{{ url_for('static', filename='img/icons/plus-thick.png') }}" />
|
|
@@ -31,15 +45,3 @@
|
|
|
31
45
|
</div>
|
|
32
46
|
|
|
33
47
|
{% endblock %}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{% block javascript %}
|
|
37
|
-
|
|
38
|
-
<script>
|
|
39
|
-
const ADD_TAG_ENDPOINT = "{{ url_for('banking.add_tag') }}";
|
|
40
|
-
const REMOVE_TAG_ENDPOINT = "{{ url_for('banking.delete_tag') }}";
|
|
41
|
-
</script>
|
|
42
|
-
<script type="module" src="{{ url_for('static', filename='js/bind-tag-actions.js') }}">
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
{% endblock %}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
{% extends "layout.html" %}
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
{% block javascript %}
|
|
5
|
+
|
|
6
|
+
<script>
|
|
7
|
+
const HIDE_HOMEPAGE_BLOCK_ENDPOINT = "{{ url_for('core.hide_homepage_block') }}";
|
|
8
|
+
</script>
|
|
9
|
+
<script type="module" src="{{ url_for('static', filename='js/hide-homepage-block.js') }}">
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{% endblock %}
|
|
13
|
+
|
|
14
|
+
|
|
3
15
|
{% block content %}
|
|
4
16
|
|
|
5
17
|
{% if session["show_homepage_block"] %}
|
|
@@ -170,11 +182,3 @@
|
|
|
170
182
|
{% endif %}
|
|
171
183
|
|
|
172
184
|
{% endblock %}
|
|
173
|
-
|
|
174
|
-
{% block javascript %}
|
|
175
|
-
<script>
|
|
176
|
-
const HIDE_HOMEPAGE_BLOCK_ENDPOINT = "{{ url_for('core.hide_homepage_block') }}";
|
|
177
|
-
</script>
|
|
178
|
-
<script type="module" src="{{ url_for('static', filename='js/hide-homepage-block.js') }}">
|
|
179
|
-
</script>
|
|
180
|
-
{% endblock %}
|
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
{% extends "layout.html" %}
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
{% block javascript %}
|
|
5
|
+
|
|
6
|
+
<script>
|
|
7
|
+
const UPDATE_BANK_NAME_ENDPOINTS = {
|
|
8
|
+
{% for bank in banks %}
|
|
9
|
+
{{ bank.id }}: "{{ url_for('banking.update_bank_name', bank_id=bank.id) }}",
|
|
10
|
+
{% endfor %}
|
|
11
|
+
};
|
|
12
|
+
</script>
|
|
13
|
+
<script type="module" src="{{ url_for('static', filename='js/expand-bank.js') }}">
|
|
14
|
+
</script>
|
|
15
|
+
<script type="module" src="{{ url_for('static', filename='js/update-bank-name.js') }}">
|
|
16
|
+
</script>
|
|
17
|
+
|
|
5
18
|
{% endblock %}
|
|
6
19
|
|
|
20
|
+
|
|
7
21
|
{% block header %}
|
|
8
|
-
<h1>Profile</h1>
|
|
22
|
+
<h1>{% block title %}Profile{% endblock %}</h1>
|
|
9
23
|
{% endblock %}
|
|
10
24
|
|
|
25
|
+
|
|
11
26
|
{% block content %}
|
|
12
27
|
|
|
13
28
|
<div id="profile">
|
|
@@ -76,19 +91,3 @@
|
|
|
76
91
|
</div>
|
|
77
92
|
|
|
78
93
|
{% endblock %}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{% block javascript %}
|
|
82
|
-
<script>
|
|
83
|
-
|
|
84
|
-
const UPDATE_BANK_NAME_ENDPOINTS = {
|
|
85
|
-
{% for bank in banks %}
|
|
86
|
-
{{ bank.id }}: "{{ url_for('banking.update_bank_name', bank_id=bank.id) }}",
|
|
87
|
-
{% endfor %}
|
|
88
|
-
};
|
|
89
|
-
</script>
|
|
90
|
-
<script type="module" src="{{ url_for('static', filename='js/expand-bank.js') }}">
|
|
91
|
-
</script>
|
|
92
|
-
<script type="module" src="{{ url_for('static', filename='js/update-bank-name.js') }}">
|
|
93
|
-
</script>
|
|
94
|
-
{% endblock %}
|