accrete 0.0.156__tar.gz → 0.0.157__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.
- {accrete-0.0.156 → accrete-0.0.157}/PKG-INFO +1 -1
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/helper.py +11 -2
- accrete-0.0.157/accrete/contrib/log/migrations/0007_alter_log_new_value_type_alter_log_old_value_type.py +23 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/models.py +4 -2
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/queries.py +1 -1
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/__init__.py +2 -1
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/response.py +7 -0
- accrete-0.0.157/accrete/contrib/ui/templates/django/forms/widgets/radio.html +5 -0
- accrete-0.0.157/accrete/contrib/ui/templates/ui/form_error.html +13 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/layout.html +1 -1
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/message.html +1 -1
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/templatetags/field.html +19 -26
- accrete-0.0.157/accrete/contrib/ui/templates/ui/templatetags/tenant_quick_switch.html +14 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templatetags/ui.py +7 -1
- accrete-0.0.157/accrete/contrib/user/migrations/0011_alter_user_theme.py +18 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/models.py +6 -4
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/models.py +19 -0
- {accrete-0.0.156 → accrete-0.0.157}/pyproject.toml +1 -1
- accrete-0.0.156/accrete/contrib/ui/templates/ui/form_error.html +0 -11
- accrete-0.0.156/accrete/contrib/ui/templates/ui/templatetags/tenant_quick_switch.html +0 -14
- {accrete-0.0.156 → accrete-0.0.157}/.gitignore +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/LICENSE +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/README.md +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/channels.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/config.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/consumer.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/context_processors.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/0002_auto_20250219_1759.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/0003_alter_country_options.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/config.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0002_log_user_alter_log_new_value_type_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0003_alter_log_tenant.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0004_logconfig_logconfigfield.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0005_logconfig_exclude_fields_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0006_remove_log_accrete_log_model_cf888c_idx_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/queries.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/signals.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/migrations/0003_alter_sequence_tenant.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/tasks.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/system_mail/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/config.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/filter.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/middleware.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0002_alter_theme_color_danger_alter_theme_color_link_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0003_alter_theme_check_user_or_tenant.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0004_theme_force_tenant_theme.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0005_theme_base_theme.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/LICENSE +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/README.md +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/bulma.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/bulma.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/bulma.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/bulma.min.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-dark-mode.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-dark-mode.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-dark-mode.min.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers-prefixed.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers-prefixed.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers-prefixed.min.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-no-helpers.min.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.min.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/package.json +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/base/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/base/animations.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/base/generic.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/base/minireset.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/base/skeleton.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/breadcrumb.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/card.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/dropdown.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/menu.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/message.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/modal.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/navbar.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/pagination.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/panel.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/components/tabs.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/block.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/box.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/button.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/content.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/delete.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/icon.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/image.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/loader.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/notification.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/progress.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/table.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/tag.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/elements/title.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/checkbox-radio.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/file.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/input-textarea.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/select.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/shared.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/form/tools.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/grid/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/grid/columns.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/grid/grid.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/aspect-ratio.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/border.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/color.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/flexbox.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/float.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/gap.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/other.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/overflow.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/position.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/spacing.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/typography.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/helpers/visibility.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/container.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/footer.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/hero.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/level.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/media.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/layout/section.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/themes/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/themes/dark.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/themes/light.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/themes/setup.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/_index.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/controls.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/css-variables.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/derived-variables.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/extends.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/functions.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/initial-variables.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/sass/utilities/mixins.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/versions/bulma-no-dark-mode.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/versions/bulma-no-helpers-prefixed.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/versions/bulma-no-helpers.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/versions/bulma-prefixed.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/css/accrete.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/css/accrete.css.map +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/css/accrete.scss +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/css/fa.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/css/icons.css +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/icons/Logo.svg +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/icons/accrete.svg +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/alpine-3.14.9.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/alpine-focus-3.14.9.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/alpine-sort-3.14.9.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/filter.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/htmx.min.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/js/ws.js +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-brands-400.ttf +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-brands-400.woff2 +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-regular-400.ttf +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-regular-400.woff2 +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-solid-900.ttf +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-solid-900.woff2 +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-v4compatibility.ttf +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/webfonts/fa-v4compatibility.woff2 +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/date.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/email.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/file.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/input.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/select.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/text.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/content.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/content_right.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/custom_theme.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/detail.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/favicon.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/filter/filter.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/filter/query_input.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/filter/query_operator.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/filter/query_params.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/filter/query_tags.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/list.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/list_update.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/modal.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/oob.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/table.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/table_row_update.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/widgets/date_weekday.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/widgets/model_search_select.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templates/ui/widgets/model_search_select_options.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/templatetags/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/urls.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/widgets/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/widgets/date_weekday.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/widgets/search_select.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/auth_backends.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/locale/de/LC_MESSAGES/django.mo +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/locale/de/LC_MESSAGES/django.po +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/middleware.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0002_user_theme.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0003_alter_user_email.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0004_user_login_alter_user_email_user_email_or_login_set.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0005_remove_user_email_or_login_set_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0006_remove_user_email_or_login_set_user_is_managed_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0007_user_managed_login.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0008_remove_user_no_email_for_managed_user_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0009_alter_user_theme.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/0010_alter_user_theme.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/accrete_navbar_end_dropdown.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/change_email.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/change_password.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/login.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/password_forgotten.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/templates/user/user_preferences.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/urls.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/admin.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/apps.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/config.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/templates/user_registration/mail_templates/confirmation_mail.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/templates/user_registration/registration.html +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/urls.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/user_registration/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/fields.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/managers.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/middleware.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0001_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0002_initial.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0003_remove_member_name.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0004_rename_accessgroupmember_memberaccessgrouprel_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0005_accessgroup_apply_on_alter_member_access_groups_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0006_alter_member_user.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0007_accessgroup_description.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0008_alter_member_access_groups_and_more.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0009_alter_accessgroup_name.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/0010_alter_accessgroup_description.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/migrations/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/models.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/storage.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/tenant.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/tests.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/urls.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/__init__.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/dates.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/forms.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/log.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/utils/views.py +0 -0
- {accrete-0.0.156 → accrete-0.0.157}/accrete/views.py +0 -0
@@ -1,8 +1,11 @@
|
|
1
|
+
import json
|
2
|
+
|
1
3
|
from django.db import models
|
2
4
|
from django.db.models.query import RawQuerySet
|
3
|
-
from django.forms import model_to_dict
|
4
5
|
|
5
6
|
from .models import Log, LogConfig
|
7
|
+
from accrete.fields import TranslatedCharField, TranslatedTextField
|
8
|
+
from accrete.utils.models import model_to_dict
|
6
9
|
|
7
10
|
TYPES_FK = ['AutoField', 'BigAutoField', 'ForeignKey']
|
8
11
|
TYPES_INT = ['IntegerField', 'PositiveSmallIntegerField']
|
@@ -13,6 +16,7 @@ TYPES_BOOL = ['BooleanField']
|
|
13
16
|
TYPES_DATETIME = ['DateTimeField']
|
14
17
|
TYPES_DATE = ['DateField']
|
15
18
|
TYPES_TIME = ['TimeField']
|
19
|
+
TYPES_JSON = ['JSONField']
|
16
20
|
|
17
21
|
|
18
22
|
def internal_type_to_log_type(field: models.Field):
|
@@ -33,6 +37,8 @@ def internal_type_to_log_type(field: models.Field):
|
|
33
37
|
return 'date'
|
34
38
|
if internal_type in TYPES_DATETIME:
|
35
39
|
return 'datetime'
|
40
|
+
if internal_type in TYPES_JSON:
|
41
|
+
return 'json'
|
36
42
|
|
37
43
|
|
38
44
|
def log_state_to_dict(logs: RawQuerySet) -> tuple[dict, dict]:
|
@@ -71,9 +77,12 @@ def get_instance_state(instance: models.Model):
|
|
71
77
|
fields_to_log = log_config.fields.all().values_list('field_name', flat=True)
|
72
78
|
|
73
79
|
for f, v in state.items():
|
74
|
-
if isinstance(v, (list, tuple
|
80
|
+
if isinstance(v, (list, tuple)):
|
75
81
|
continue
|
76
82
|
if f not in fields_to_log:
|
77
83
|
continue
|
84
|
+
if isinstance(v, dict) and isinstance(instance._meta.get_field(f), (TranslatedCharField, TranslatedTextField)):
|
85
|
+
cleaned_state.update({f: json.dumps(v)})
|
86
|
+
continue
|
78
87
|
cleaned_state.update({f: v})
|
79
88
|
return cleaned_state
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Generated by Django 5.2.7 on 2025-10-06 18:59
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
('log', '0006_remove_log_accrete_log_model_cf888c_idx_and_more'),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name='log',
|
15
|
+
name='new_value_type',
|
16
|
+
field=models.CharField(choices=[('fk', 'Foreign Key'), ('int', 'Integer'), ('float', 'Float'), ('decimal', 'Decimal'), ('bool', 'Boolean'), ('str', 'String'), ('date', 'Date'), ('datetime', 'Date Time'), ('json', 'JSON')], max_length=100, verbose_name='New Value Type'),
|
17
|
+
),
|
18
|
+
migrations.AlterField(
|
19
|
+
model_name='log',
|
20
|
+
name='old_value_type',
|
21
|
+
field=models.CharField(choices=[('fk', 'Foreign Key'), ('int', 'Integer'), ('float', 'Float'), ('decimal', 'Decimal'), ('bool', 'Boolean'), ('str', 'String'), ('date', 'Date'), ('datetime', 'Date Time'), ('json', 'JSON')], max_length=100, verbose_name='Old Value Type'),
|
22
|
+
),
|
23
|
+
]
|
@@ -63,7 +63,8 @@ class Log(models.Model):
|
|
63
63
|
('bool', 'Boolean'),
|
64
64
|
('str', 'String'),
|
65
65
|
('date', 'Date'),
|
66
|
-
('datetime', 'Date Time')
|
66
|
+
('datetime', 'Date Time'),
|
67
|
+
('json', 'JSON')
|
67
68
|
],
|
68
69
|
max_length=100,
|
69
70
|
)
|
@@ -78,7 +79,8 @@ class Log(models.Model):
|
|
78
79
|
('bool', 'Boolean'),
|
79
80
|
('str', 'String'),
|
80
81
|
('date', 'Date'),
|
81
|
-
('datetime', 'Date Time')
|
82
|
+
('datetime', 'Date Time'),
|
83
|
+
('json', 'JSON')
|
82
84
|
],
|
83
85
|
max_length=100
|
84
86
|
)
|
@@ -5,7 +5,7 @@ from accrete.tenant import get_tenant
|
|
5
5
|
from .models import Sequence
|
6
6
|
|
7
7
|
|
8
|
-
def get_nextval(name, create_if_none=True):
|
8
|
+
def get_nextval(name: str, create_if_none:bool = True) -> int:
|
9
9
|
tenant = get_tenant()
|
10
10
|
with transaction.atomic():
|
11
11
|
seq = Sequence.objects.filter(
|
@@ -465,3 +465,10 @@ def update(request, ui_responses: list[Response], trigger: list[ClientTrigger] =
|
|
465
465
|
for t in trigger or []:
|
466
466
|
add_trigger(response, t.trigger, t.header)
|
467
467
|
return response
|
468
|
+
|
469
|
+
|
470
|
+
def redirect_response(url: str, reload: bool = True):
|
471
|
+
res = HttpResponse()
|
472
|
+
header = 'HX-Redirect' if reload else 'HX-Location'
|
473
|
+
res[header] = url
|
474
|
+
return res
|
@@ -0,0 +1,5 @@
|
|
1
|
+
{% with id=widget.attrs.id %}<div{% if id %} id="{{ id }}"{% endif %}{% if widget.attrs.class %} class="{{ widget.attrs.class }}"{% endif %}>{% for group, options, index in widget.optgroups %}{% if group %}
|
2
|
+
<div><label class="has-text-weight-medium">{{ group }}</label>{% endif %}<div style="display: flex; flex-direction: row; flex-wrap: wrap">{% for option in options %}<div class="mr-2" style="white-space: nowrap">
|
3
|
+
{% include option.template_name with widget=option %}</div>{% endfor %}</div>{% if group %}
|
4
|
+
</div>{% endif %}{% endfor %}
|
5
|
+
</div>{% endwith %}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{% load i18n %}
|
2
|
+
|
3
|
+
{% if form.non_field_errors or form.save_error %}
|
4
|
+
<div class="message is-danger" style="word-wrap: break-word;">
|
5
|
+
<div class="message-body">
|
6
|
+
{{ form.non_field_errors }}
|
7
|
+
{% if form.save_error %}
|
8
|
+
<p>{{ form.save_error }}</p>
|
9
|
+
{% if form.save_error_id %}<span>{% translate 'Error ID' %}: {{ form.save_error_id }}</span>{% endif %}
|
10
|
+
{% endif %}
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
{% endif %}
|
@@ -146,7 +146,7 @@
|
|
146
146
|
<div id="message" class="" style="position: fixed; top: calc(var(--bulma-navbar-height) + 5px); left: 50%; transform: translateX(-50%); z-index: 999">
|
147
147
|
{% for message in messages %}
|
148
148
|
<div class="mb-2" style="min-width: 330px; max-width: 330px" x-data="{ show: false }" x-show="show" x-cloak="" x-init="show = true; setTimeout(() => show = false, 4000)" x-transition.duration.200ms>
|
149
|
-
<article class="message {{ message|message_class }}"
|
149
|
+
<article class="message {{ message|message_class }}">
|
150
150
|
<div class="message-body">
|
151
151
|
{{ message }}
|
152
152
|
<button class="delete" x-on:click="show = false;" style="position: absolute; top: 5px; right: 5px"></button>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
{% for message in messages %}
|
5
5
|
<div hx-swap-oob="{% if append %}beforeend:#message{% else %}innerHTML:#message{% endif %}">
|
6
6
|
<div class="mb-2" style="min-width: 340px; max-width: 340px" x-data="{ show: false }" x-show="show" x-cloak="" x-init="show = true; {% if not persistent %}setTimeout(() => show = false, 4000){% endif %}" x-transition.duration.200ms>
|
7
|
-
<article class="message {{ message|message_class }}"
|
7
|
+
<article class="message {{ message|message_class }}">
|
8
8
|
<div class="message-body">
|
9
9
|
{{ message }}
|
10
10
|
<button class="delete" x-on:click="show = false;" style="position: absolute; top: 5px; right: 5px"></button>
|
@@ -1,28 +1,9 @@
|
|
1
1
|
{% load ui %}
|
2
2
|
{% load partials %}
|
3
3
|
|
4
|
-
{#{% partialdef form_field %}#}
|
5
|
-
{# <label class="label mt-2 mb-5">#}
|
6
|
-
{# {{ field.label }}#}
|
7
|
-
{# {{ field }}#}
|
8
|
-
{# <span class="has-text-danger is-size-6">{{ field.errors }}</span>#}
|
9
|
-
{# <span class="helptext is-size-7">{{ field.help_text }}</span>#}
|
10
|
-
{# <span class="helptext is-size-7">{% if label %}{{ label }}{% else %}{{ field.help_text|default_if_falsy:field.label }}{% endif %}</span>#}
|
11
|
-
{# </label>#}
|
12
|
-
{#{% endpartialdef %}#}
|
13
|
-
|
14
|
-
{#{% partialdef form_field %}#}
|
15
|
-
{# <label class="label mt-2 mb-5" style="border: 1px solid; border-radius: var(--bulma-radius);">#}
|
16
|
-
{# <span style="justify-content: left" class="is-fullwidth button is-static helptext is-size-7 {% if field.field.required %}has-text-weight-bold{% endif %}">{% if label %}{{ label }}{% else %}{{ field.help_text|default_if_falsy:field.label }}{% endif %}</span>#}
|
17
|
-
{# {{ field }}#}
|
18
|
-
{# <span class="has-text-danger is-size-6">{{ field.errors }}Testmessage</span>#}
|
19
|
-
{##}
|
20
|
-
{# </label>#}
|
21
|
-
{#{% endpartialdef %}#}
|
22
|
-
|
23
4
|
{% partialdef form_field %}
|
24
5
|
<div class="mb-5">
|
25
|
-
<label class="label mb-0 {% if field.field.required %}has-text-weight-
|
6
|
+
<label class="label mb-0 {% if field.field.required %}has-text-weight-bold{% endif %}" for="{{ field.id_for_label }}">{{ field.label }}</label>
|
26
7
|
<div class="field has-addons mb-0">
|
27
8
|
{% if icon %}
|
28
9
|
<p class="control">
|
@@ -36,6 +17,24 @@
|
|
36
17
|
</div>
|
37
18
|
{% endpartialdef %}
|
38
19
|
|
20
|
+
{% partialdef form_checkbox %}
|
21
|
+
<div class="mb-5">
|
22
|
+
<div class="level" style="display: flex; flex-direction: row; justify-content: start">
|
23
|
+
<div class="field has-addons mb-0">
|
24
|
+
{% if icon %}
|
25
|
+
<p class="control">
|
26
|
+
<button tabindex="-1" type="button" class="button is-static"><span class="icon"><i class="{{ icon }}"></i></span></button>
|
27
|
+
</p>
|
28
|
+
{% endif %}
|
29
|
+
<div class="control is-expanded">{{ field }}</div>
|
30
|
+
</div>
|
31
|
+
<label class="label mb-0 {% if field.field.required %}has-text-weight-bold{% endif %}" for="{{ field.id_for_label }}">{{ field.label }}</label>
|
32
|
+
</div>
|
33
|
+
<span class="has-text-danger is-size-6">{{ field.errors }}</span>
|
34
|
+
<span class="helptext is-size-7">{{ field.help_text|default_if_falsy:'' }}</span>
|
35
|
+
</div>
|
36
|
+
{% endpartialdef %}
|
37
|
+
|
39
38
|
{% partialdef textarea %}
|
40
39
|
<label class="label mt-2 mb-5">
|
41
40
|
<span class="{% if field.field.required %}has-text-weight-normal{% endif %}">{{ field.label }}</span>
|
@@ -45,12 +44,6 @@
|
|
45
44
|
{% endpartialdef %}
|
46
45
|
|
47
46
|
{% partialdef model_field %}
|
48
|
-
{# <label class="label mt-2 mb-5">#}
|
49
|
-
{# <span class="field has-addons mb-0">#}
|
50
|
-
{# <span class="control input has-text-weight-bold">{{ value|default_if_none:'' }}</span>#}
|
51
|
-
{# </span>#}
|
52
|
-
{# <span class="helptext">{{ label }}</span>#}
|
53
|
-
{# </label>#}
|
54
47
|
<div class="mb-5">
|
55
48
|
<label class="label mb-0 {% if field.field.required %}has-text-weight-bold{% endif %}" for="{{ field.id_for_label }}">{{ label }}</label>
|
56
49
|
<div class="field has-addons mb-0">
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="navbar-item is-unselectable has-text-weight-bold" style="{% if switch_url %}cursor: pointer;{% endif %}" x-on:click="showQuickSwitch = !showQuickSwitch;">
|
2
|
+
{{ tenant.name }}
|
3
|
+
</div>
|
4
|
+
{% if tenants and switch_url %}
|
5
|
+
<article class="box p-1" style="position: fixed; top: var(--bulma-navbar-height); left: 0; min-width: 150px; border-top-left-radius: 0; border-top-right-radius: 0;"
|
6
|
+
x-show="showQuickSwitch" x-cloak="" x-on:click.outside="showQuickSwitch = false"
|
7
|
+
>
|
8
|
+
<ul class="hoverable mr-1">
|
9
|
+
{% for t in tenants %}
|
10
|
+
<li class="navbar-item" style="cursor: pointer; border-radius: var(--bulma-radius);"><a href="{{ switch_url }}?tenant_id={{ t.pk }}" hx-boost="false" style="width: 100%; display: inline-block">{{ t.name }}</a></li>
|
11
|
+
{% endfor %}
|
12
|
+
</ul>
|
13
|
+
</article>
|
14
|
+
{% endif %}
|
@@ -163,13 +163,19 @@ def x_ref_save(param: str):
|
|
163
163
|
|
164
164
|
|
165
165
|
@register.filter(name='wrap_form_field')
|
166
|
-
def
|
166
|
+
def wrap_form_field(field, icon=None):
|
167
167
|
if isinstance(field.field.widget, widgets.Textarea):
|
168
168
|
html = render_to_string(
|
169
169
|
'ui/templatetags/field.html#textarea',
|
170
170
|
{'field': field, 'icon': None}
|
171
171
|
)
|
172
172
|
return mark_safe(html)
|
173
|
+
if isinstance(field.field.widget, widgets.CheckboxInput):
|
174
|
+
html = render_to_string(
|
175
|
+
'ui/templatetags/field.html#form_checkbox',
|
176
|
+
{'field': field, 'icon': None}
|
177
|
+
)
|
178
|
+
return mark_safe(html)
|
173
179
|
html = render_to_string(
|
174
180
|
'ui/templatetags/field.html#form_field',
|
175
181
|
{'field': field, 'icon': icon}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Generated by Django 5.2.7 on 2025-10-08 18:11
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
('user', '0010_alter_user_theme'),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name='user',
|
15
|
+
name='theme',
|
16
|
+
field=models.CharField(choices=[(None, [('preset', 'Preset'), ('light', 'Light'), ('dark', 'Dark'), ('custom', 'Custom')])], default='preset', max_length=50, verbose_name='Theme'),
|
17
|
+
),
|
18
|
+
]
|
@@ -181,10 +181,12 @@ class User(AbstractBaseUser, PermissionsMixin):
|
|
181
181
|
verbose_name=_('Theme'),
|
182
182
|
max_length=50,
|
183
183
|
choices=[
|
184
|
-
(
|
185
|
-
|
186
|
-
|
187
|
-
|
184
|
+
(None, (
|
185
|
+
('preset', _('Preset')),
|
186
|
+
('light', _('Light')),
|
187
|
+
('dark', _('Dark')),
|
188
|
+
('custom', _('Custom'))
|
189
|
+
))
|
188
190
|
],
|
189
191
|
default='preset'
|
190
192
|
)
|
@@ -1,6 +1,9 @@
|
|
1
1
|
import json
|
2
2
|
from django.db import connection
|
3
3
|
from django.db.models import Model, Field
|
4
|
+
from django.forms import model_to_dict as mtd
|
5
|
+
|
6
|
+
from accrete.fields import TranslatedCharField, TranslatedTextField
|
4
7
|
|
5
8
|
|
6
9
|
def get_related_model(model: type[Model], rel_path: str) -> tuple[Model, list[str]]:
|
@@ -43,3 +46,19 @@ def translated_db_value(instance: Model, field: str) -> dict:
|
|
43
46
|
row = row and row[0]
|
44
47
|
db_value = row and json.loads(row) or dict()
|
45
48
|
return db_value
|
49
|
+
|
50
|
+
|
51
|
+
def model_to_dict(instance, fields=None, exclude=None, translated=True):
|
52
|
+
"""
|
53
|
+
Extends django.forms.model_to_dict with the option to get the
|
54
|
+
translation dict instead of the translated string for the active language
|
55
|
+
"""
|
56
|
+
data = mtd(instance, fields=fields, exclude=exclude)
|
57
|
+
if translated:
|
58
|
+
return data
|
59
|
+
updates = {}
|
60
|
+
for f, v in data.items():
|
61
|
+
if isinstance(instance._meta.get_field(f), (TranslatedCharField, TranslatedTextField)):
|
62
|
+
updates.update({f: translated_db_value(instance, f)})
|
63
|
+
data.update(updates)
|
64
|
+
return data
|
@@ -1,11 +0,0 @@
|
|
1
|
-
{% load i18n %}
|
2
|
-
|
3
|
-
{% if form.non_field_errors or form.save_error %}
|
4
|
-
<div class="notification is-danger is-light" style="word-wrap: break-word;">
|
5
|
-
{{ form.non_field_errors }}
|
6
|
-
{% if form.save_error %}
|
7
|
-
<p>{{ form.save_error }}</p>
|
8
|
-
{% if form.save_error_id %}<span>{% translate 'Error ID' %}: {{ form.save_error_id }}</span>{% endif %}
|
9
|
-
{% endif %}
|
10
|
-
</div>
|
11
|
-
{% endif %}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
<div class="navbar-item is-unselectable has-text-weight-bold" style="{% if switch_url %}cursor: pointer;{% endif %}" x-on:click="showQuickSwitch = !showQuickSwitch;">
|
2
|
-
{{ tenant.name }}
|
3
|
-
</div>
|
4
|
-
{% if tenants and switch_url %}
|
5
|
-
<article class="p-1 has-text-weight-bold" style="background-color: var(--bulma-body-background-color); position: fixed; top: var(--bulma-navbar-height); left: 0; box-shadow: 2px 2px 5px; border-bottom-right-radius: var(--bulma-radius); min-width: 150px;"
|
6
|
-
x-show="showQuickSwitch" x-cloak="" x-on:click.outside="showQuickSwitch = false"
|
7
|
-
>
|
8
|
-
<ul class="hoverable mr-1">
|
9
|
-
{% for t in tenants %}
|
10
|
-
<li class="title is-6 mb-1 p-2" style="cursor: pointer; border-radius: var(--bulma-radius);"><a href="{{ switch_url }}?tenant_id={{ t.pk }}" hx-boost="false" style="width: 100%; display: inline-block">{{ t.name }}</a></li>
|
11
|
-
{% endfor %}
|
12
|
-
</ul>
|
13
|
-
</article>
|
14
|
-
{% endif %}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/0002_auto_20250219_1759.py
RENAMED
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/country/migrations/0003_alter_country_options.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/log/migrations/0004_logconfig_logconfigfield.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/migrations/0004_theme_force_tenant_theme.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.156 → accrete-0.0.157}/accrete/contrib/ui/static/bulma/css/versions/bulma-prefixed.css
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|