django-advanced-report-builder 0.5.5__tar.gz → 0.5.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of django-advanced-report-builder might be problematic. Click here for more details.
- {django-advanced-report-builder-0.5.5/django_advanced_report_builder.egg-info → django-advanced-report-builder-0.5.7}/PKG-INFO +1 -5
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/columns.py +10 -1
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/utils.py +12 -10
- django-advanced-report-builder-0.5.7/advanced_report_builder/field_utils.py +57 -0
- django-advanced-report-builder-0.5.7/advanced_report_builder/utils.py +78 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/bar_charts.py +24 -22
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/charts_base.py +15 -13
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/datatables.py +4 -4
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/modal.py +4 -5
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/utils.py +6 -6
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/kanban.py +14 -13
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/modals_base.py +7 -6
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/report_utils_mixin.py +2 -1
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/single_values.py +6 -6
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7/django_advanced_report_builder.egg-info}/PKG-INFO +1 -5
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/SOURCES.txt +1 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/setup.py +1 -1
- django-advanced-report-builder-0.5.5/advanced_report_builder/utils.py +0 -129
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/LICENSE +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/MANIFEST.in +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/README.md +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/admin.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/apps.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/customise.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/widget.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/duplicate.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/exceptions.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/field_types.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/filter_query.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/generate_series.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/globals.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/includes.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0001_initial.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0002_auto_20220209_1657.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0003_auto_20220215_1219.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0004_customreport.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0005_auto_20220303_0958.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0006_auto_20220310_1147.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0007_auto_20220322_1939.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0008_auto_20220404_1144.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0009_auto_20230428_1554.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0010_auto_20230428_2033.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0011_auto_20230620_1449.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0012_auto_20230718_1642.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/models.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/report_builder.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.esm.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-adapter-moment.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-plugin-datalabels.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chunks/helpers.segment.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/chart-js/js/helpers.esm.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dashboard/js/dashboard.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/.gitignore +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/.travis.yml +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/LICENSE-DOT.txt +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/README.md +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/bin/dot-packer +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/bower.json +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/doU.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/index.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/dot/js/package.json +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.css +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.min.css +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.css +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.min.css +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ar.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.az.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.bg.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.cs.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.da.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.de.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.el.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.en.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.es.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fa-IR.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fr.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.he.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.it.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.nl.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.no.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pl.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-BR.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-PT.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ro.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ru.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.sq.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.tr.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ua.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.zh-CN.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/currency/plugin.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.min.js +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/dark.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/default.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-checkbox.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-tooltip-errors.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_filter-description.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_invert.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_sortable.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/bt-tooltip-errors.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/filter-description.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/invert.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/sortable.scss +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/bar/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/report.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/line/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/modal_field.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/pie/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/charts/report.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/data_merge/data_merge.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/single_query_builder.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/onclick_menu.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/query_modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/report.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/datatables/select_pivot.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/kanban/description_modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/kanban/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/kanban/modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/kanban/report.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/query_builder.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/select_column.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/single_values/middle.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/single_values/modal.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/templates/advanced_report_builder/single_values/report.html +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/toggle.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/urls.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/variable_date.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/custom.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/dashboard.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/funnel_charts.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/line_charts.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/pie_charts.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/report.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/reports.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/__init__.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/utils.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/views.py +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/dependency_links.txt +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/requires.txt +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/top_level.txt +0 -0
- {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/setup.cfg +0 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-advanced-report-builder
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.7
|
|
4
4
|
Summary: Django app that allows you to build reports from modals
|
|
5
5
|
Home-page: https://github.com/django-advance-utils/django-advanced-report-builder
|
|
6
6
|
Author: Thomas Turner
|
|
7
|
-
License: UNKNOWN
|
|
8
|
-
Platform: UNKNOWN
|
|
9
7
|
Classifier: Programming Language :: Python :: 3
|
|
10
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
9
|
Classifier: Operating System :: OS Independent
|
|
@@ -17,5 +15,3 @@ License-File: LICENSE
|
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
# django-advanced-report-builder
|
|
20
|
-
|
|
21
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.contrib.humanize.templatetags.humanize import intcomma
|
|
2
2
|
from django.db.models import Count
|
|
3
|
-
from django_datatables.columns import ColumnBase, CurrencyPenceColumn, CurrencyColumn, NoHeadingColumn, ColumnLink
|
|
3
|
+
from django_datatables.columns import ColumnBase, CurrencyPenceColumn, CurrencyColumn, NoHeadingColumn, ColumnLink, \
|
|
4
|
+
ManyToManyColumn
|
|
4
5
|
from django_datatables.helpers import get_url, DUMMY_ID
|
|
5
6
|
|
|
6
7
|
|
|
@@ -107,3 +108,11 @@ class RecordCountColumn(ColumnBase):
|
|
|
107
108
|
if 'column_name' not in kwargs:
|
|
108
109
|
kwargs['column_name'] = 'record_count'
|
|
109
110
|
super().__init__(field, **kwargs)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class ReportBuilderManyToManyColumn(ManyToManyColumn):
|
|
114
|
+
def row_result(self, data_dict, page_results):
|
|
115
|
+
model_path = ''
|
|
116
|
+
if self.model_path != '':
|
|
117
|
+
model_path = self.model_path[:-1]
|
|
118
|
+
return page_results['m2m' + self.column_name].get(data_dict[model_path + 'id'], self.blank)
|
|
@@ -2,19 +2,21 @@ import re
|
|
|
2
2
|
|
|
3
3
|
from django.apps import apps
|
|
4
4
|
|
|
5
|
-
from advanced_report_builder.
|
|
5
|
+
from advanced_report_builder.field_utils import ReportBuilderFieldUtils
|
|
6
|
+
from advanced_report_builder.utils import get_report_builder_class
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
class DataMergeUtils:
|
|
9
|
+
class DataMergeUtils(ReportBuilderFieldUtils):
|
|
9
10
|
def get_menu_fields(self, base_model, report_builder_class,
|
|
10
11
|
menus=None, codes=None, code_prefix='', next_code_prefix='__',
|
|
11
12
|
previous_base_model=None, table=None):
|
|
12
13
|
|
|
13
14
|
for report_builder_field in report_builder_class.fields:
|
|
14
|
-
django_field, col_type_override, columns, _ = get_field_details(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
django_field, col_type_override, columns, _ = self.get_field_details(
|
|
16
|
+
base_model=base_model,
|
|
17
|
+
field=report_builder_field,
|
|
18
|
+
report_builder_class=report_builder_class,
|
|
19
|
+
table=table)
|
|
18
20
|
for column in columns:
|
|
19
21
|
full_id = code_prefix + column.column_name
|
|
20
22
|
if menus is not None:
|
|
@@ -77,10 +79,10 @@ class DataMergeUtils:
|
|
|
77
79
|
columns = set()
|
|
78
80
|
column_map = {}
|
|
79
81
|
for field in all_fields:
|
|
80
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
83
|
+
field=field,
|
|
84
|
+
report_builder_class=report_builder_class,
|
|
85
|
+
table=table)
|
|
84
86
|
if django_field is not None or isinstance(col_type_override.field, (list, tuple)):
|
|
85
87
|
if field not in columns and f'.{field}' not in columns:
|
|
86
88
|
columns.add('.' + field)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from django_datatables.columns import ColumnNameError
|
|
2
|
+
from django_datatables.datatables import ColumnInitialisor
|
|
3
|
+
|
|
4
|
+
from advanced_report_builder.exceptions import ReportError
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ReportBuilderFieldUtils:
|
|
8
|
+
column_initialisor_cls = ColumnInitialisor
|
|
9
|
+
def get_field_details(self, base_model, field, report_builder_class, table=None, field_attr=None):
|
|
10
|
+
|
|
11
|
+
if field_attr is None:
|
|
12
|
+
field_attr = {}
|
|
13
|
+
if isinstance(field, str) and field in report_builder_class.field_classes:
|
|
14
|
+
field = report_builder_class.field_classes[field]
|
|
15
|
+
|
|
16
|
+
path = field
|
|
17
|
+
original_column_initialisor = self.column_initialisor_cls(start_model=base_model,
|
|
18
|
+
path=field,
|
|
19
|
+
table=table,
|
|
20
|
+
**field_attr)
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
columns = original_column_initialisor.get_columns()
|
|
24
|
+
except ColumnNameError as e:
|
|
25
|
+
raise ReportError(e)
|
|
26
|
+
django_field = original_column_initialisor.django_field
|
|
27
|
+
col_type_override = None
|
|
28
|
+
if columns:
|
|
29
|
+
col_type_override = columns[0]
|
|
30
|
+
if isinstance(field, str) and '__' in field and col_type_override.model_path == '':
|
|
31
|
+
# I think there is a bug in datatables where the model path isn't always set! hence the following code
|
|
32
|
+
field_parts = field.split('__')[:-1]
|
|
33
|
+
model_path = '__'.join(field_parts) + '__'
|
|
34
|
+
col_type_override.model_path = model_path
|
|
35
|
+
col_type_override.field = col_type_override.field # actions the setter
|
|
36
|
+
path = model_path
|
|
37
|
+
|
|
38
|
+
if django_field is None and columns:
|
|
39
|
+
col_type_override = columns[0]
|
|
40
|
+
if isinstance(col_type_override.field, str):
|
|
41
|
+
if isinstance(field, str):
|
|
42
|
+
path_parts = field.split('__')[:-1]
|
|
43
|
+
path_parts.append(col_type_override.field.split('__')[-1])
|
|
44
|
+
path = '__'.join(path_parts)
|
|
45
|
+
column_initialisor = self.column_initialisor_cls(start_model=base_model, path=path, table=table,
|
|
46
|
+
**field_attr)
|
|
47
|
+
column_initialisor.get_columns()
|
|
48
|
+
django_field = column_initialisor.django_field
|
|
49
|
+
else:
|
|
50
|
+
column_initialisor = self.column_initialisor_cls(start_model=base_model,
|
|
51
|
+
path=col_type_override.field,
|
|
52
|
+
table=table,
|
|
53
|
+
**field_attr)
|
|
54
|
+
column_initialisor.get_columns()
|
|
55
|
+
django_field = column_initialisor.django_field
|
|
56
|
+
|
|
57
|
+
return django_field, col_type_override, columns, path
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
|
|
3
|
+
from crispy_forms.layout import HTML, Div
|
|
4
|
+
from django.conf import settings
|
|
5
|
+
from django.utils.module_loading import import_string
|
|
6
|
+
from django_modals.helper import show_modal
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def split_attr(data):
|
|
10
|
+
if 'data_attr' not in data:
|
|
11
|
+
return {}
|
|
12
|
+
_attr = {}
|
|
13
|
+
s = data['data_attr'].split('-')
|
|
14
|
+
_attr.update({s[k]: s[k + 1] for k in range(0, int(len(s) - 1), 2)})
|
|
15
|
+
return _attr
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def split_slug(slug_str):
|
|
19
|
+
s = slug_str.split('-')
|
|
20
|
+
slug = {}
|
|
21
|
+
if len(s) == 1:
|
|
22
|
+
slug['pk'] = s[0]
|
|
23
|
+
else:
|
|
24
|
+
slug.update({s[k]: s[k + 1] for k in range(0, int(len(s) - 1), 2)})
|
|
25
|
+
return slug
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def make_slug_str(slug, overrides=None):
|
|
29
|
+
if len(slug) == 1 and 'pk' in slug and not overrides:
|
|
30
|
+
return slug['pk']
|
|
31
|
+
|
|
32
|
+
if not overrides:
|
|
33
|
+
slug_parts = [f'{k}-{v}' for k, v in slug.items()]
|
|
34
|
+
else:
|
|
35
|
+
slug_parts = []
|
|
36
|
+
for key, value in slug.items():
|
|
37
|
+
if key in overrides:
|
|
38
|
+
continue
|
|
39
|
+
slug_parts.append(f'{key}-{value}')
|
|
40
|
+
for key, value in overrides.items():
|
|
41
|
+
slug_parts.append(f'{key}-{value}')
|
|
42
|
+
|
|
43
|
+
return '-'.join(slug_parts)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def get_custom_report_builder():
|
|
47
|
+
return import_string(getattr(settings,
|
|
48
|
+
'REPORT_BUILDER_CUSTOMISATION',
|
|
49
|
+
'report_builder.customise.CustomiseReportBuilder'))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def crispy_modal_link_args(modal_name, text, *args, div=False, div_classes='', button_classes='', font_awesome=None):
|
|
53
|
+
link = HTML(show_modal(modal_name, *args, button=text, button_classes=button_classes, font_awesome=font_awesome))
|
|
54
|
+
if div:
|
|
55
|
+
link = Div(link, css_class=div_classes)
|
|
56
|
+
return link
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def encode_attribute(string_in):
|
|
60
|
+
_data = string_in.encode('utf-8', 'ignore')
|
|
61
|
+
_data = base64.urlsafe_b64encode(_data).decode('utf-8', 'ignore')
|
|
62
|
+
return _data.replace('-', '@')
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def decode_attribute(data_attr):
|
|
66
|
+
data_attr = data_attr.replace('@', '-')
|
|
67
|
+
_data = base64.urlsafe_b64decode(data_attr)
|
|
68
|
+
return _data.decode('utf-8', 'ignore')
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_report_builder_class(model, report_type=None, class_name=None):
|
|
72
|
+
if class_name is None:
|
|
73
|
+
class_name = report_type.report_builder_class_name
|
|
74
|
+
|
|
75
|
+
report_builder_class = getattr(model, class_name, None)
|
|
76
|
+
if report_builder_class is not None:
|
|
77
|
+
report_builder_class = report_builder_class()
|
|
78
|
+
return report_builder_class
|
|
@@ -29,7 +29,7 @@ from advanced_report_builder.globals import DEFAULT_DATE_FORMAT, \
|
|
|
29
29
|
GENERATE_SERIES_INTERVALS
|
|
30
30
|
from advanced_report_builder.models import BarChartReport, ReportType
|
|
31
31
|
from advanced_report_builder.toggle import RBToggle
|
|
32
|
-
from advanced_report_builder.utils import split_attr, encode_attribute, decode_attribute,
|
|
32
|
+
from advanced_report_builder.utils import split_attr, encode_attribute, decode_attribute, \
|
|
33
33
|
get_report_builder_class
|
|
34
34
|
from advanced_report_builder.views.charts_base import ChartBaseView, ChartBaseFieldForm
|
|
35
35
|
from advanced_report_builder.views.datatables.modal import TableFieldModal, TableFieldForm
|
|
@@ -101,17 +101,19 @@ class BarChartView(ChartBaseView):
|
|
|
101
101
|
report_builder_class = get_report_builder_class(model=base_model,
|
|
102
102
|
report_type=self.chart_report.report_type)
|
|
103
103
|
|
|
104
|
-
start_django_field, start_col_type_override, _, _ = get_field_details(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
start_django_field, start_col_type_override, _, _ = self.get_field_details(
|
|
105
|
+
base_model=base_model,
|
|
106
|
+
field=start_field_name,
|
|
107
|
+
report_builder_class=report_builder_class,
|
|
108
|
+
table=table)
|
|
108
109
|
if start_col_type_override:
|
|
109
110
|
start_field_name = start_col_type_override.field
|
|
110
111
|
|
|
111
|
-
end_django_field, end_col_type_override, _, _ = get_field_details(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
end_django_field, end_col_type_override, _, _ = self.get_field_details(
|
|
113
|
+
base_model=base_model,
|
|
114
|
+
field=end_field_name,
|
|
115
|
+
report_builder_class=report_builder_class,
|
|
116
|
+
table=table)
|
|
115
117
|
if end_col_type_override:
|
|
116
118
|
end_field_name = end_col_type_override.field
|
|
117
119
|
|
|
@@ -477,10 +479,10 @@ class BarChartShowBreakdownModal(TableUtilsMixin, Modal):
|
|
|
477
479
|
data_index = int(self.slug['data'])
|
|
478
480
|
table_field = chart_fields[data_index]
|
|
479
481
|
field = table_field['field']
|
|
480
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
482
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
483
|
+
field=field,
|
|
484
|
+
report_builder_class=report_builder_class,
|
|
485
|
+
table=table)
|
|
484
486
|
|
|
485
487
|
self.field_filter = None
|
|
486
488
|
if (isinstance(django_field, NUMBER_FIELDS) or
|
|
@@ -494,16 +496,16 @@ class BarChartShowBreakdownModal(TableUtilsMixin, Modal):
|
|
|
494
496
|
_filter = decode_attribute(b64_filter)
|
|
495
497
|
self.field_filter = json.loads(_filter)
|
|
496
498
|
|
|
497
|
-
self.date_field_path = get_field_details(base_model=base_model,
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
499
|
+
self.date_field_path = self.get_field_details(base_model=base_model,
|
|
500
|
+
field=bar_chart_report.date_field,
|
|
501
|
+
report_builder_class=report_builder_class,
|
|
502
|
+
table=table)[3]
|
|
501
503
|
if bar_chart_report.date_field_type == BarChartReport.DATE_FIELD_RANGE:
|
|
502
|
-
self.end_date_field_path = get_field_details(base_model=base_model,
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
504
|
+
self.end_date_field_path = self.get_field_details(base_model=base_model,
|
|
505
|
+
field=bar_chart_report.end_date_field,
|
|
506
|
+
report_builder_class=report_builder_class,
|
|
507
|
+
table=table)[3]
|
|
508
|
+
|
|
507
509
|
table.extra_filters = self.extra_filters
|
|
508
510
|
|
|
509
511
|
table.ajax_data = False
|
|
@@ -17,10 +17,11 @@ from django_modals.forms import CrispyForm
|
|
|
17
17
|
|
|
18
18
|
from advanced_report_builder.columns import ReportBuilderDateColumn
|
|
19
19
|
from advanced_report_builder.exceptions import ReportError
|
|
20
|
+
from advanced_report_builder.field_utils import ReportBuilderFieldUtils
|
|
20
21
|
from advanced_report_builder.globals import NUMBER_FIELDS, ANNOTATION_VALUE_FUNCTIONS, ANNOTATION_VALUE_YEAR, \
|
|
21
22
|
ANNOTATION_VALUE_QUARTER, ANNOTATION_VALUE_WEEK, ANNOTATION_VALUE_DAY, ANNOTATION_VALUE_MONTH
|
|
22
23
|
from advanced_report_builder.models import ReportType
|
|
23
|
-
from advanced_report_builder.utils import split_slug,
|
|
24
|
+
from advanced_report_builder.utils import split_slug, split_attr, get_report_builder_class
|
|
24
25
|
from advanced_report_builder.variable_date import VariableDate
|
|
25
26
|
from advanced_report_builder.views.report import ReportBase
|
|
26
27
|
from advanced_report_builder.views.report_utils_mixin import ReportUtilsMixin
|
|
@@ -134,10 +135,10 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
|
|
|
134
135
|
report_builder_class = get_report_builder_class(model=base_model,
|
|
135
136
|
report_type=self.chart_report.report_type)
|
|
136
137
|
|
|
137
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
139
|
+
field=field_name,
|
|
140
|
+
report_builder_class=report_builder_class,
|
|
141
|
+
table=table)
|
|
141
142
|
|
|
142
143
|
if col_type_override:
|
|
143
144
|
field_name = col_type_override.field
|
|
@@ -188,10 +189,10 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
|
|
|
188
189
|
for index, table_field in enumerate(chart_fields, 1):
|
|
189
190
|
field = table_field['field']
|
|
190
191
|
|
|
191
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
193
|
+
field=field,
|
|
194
|
+
report_builder_class=report_builder_class,
|
|
195
|
+
table=table)
|
|
195
196
|
|
|
196
197
|
if (isinstance(django_field, NUMBER_FIELDS) or
|
|
197
198
|
(col_type_override is not None and col_type_override.annotations)):
|
|
@@ -336,7 +337,7 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
|
|
|
336
337
|
return divider
|
|
337
338
|
|
|
338
339
|
|
|
339
|
-
class ChartBaseFieldForm(CrispyForm):
|
|
340
|
+
class ChartBaseFieldForm(ReportBuilderFieldUtils, CrispyForm):
|
|
340
341
|
cancel_class = 'btn-secondary modal-cancel'
|
|
341
342
|
|
|
342
343
|
def __init__(self, *args, **kwargs):
|
|
@@ -364,9 +365,10 @@ class ChartBaseFieldForm(CrispyForm):
|
|
|
364
365
|
report_builder_class = get_report_builder_class(model=base_model,
|
|
365
366
|
report_type=report_type)
|
|
366
367
|
|
|
367
|
-
self.django_field, self.col_type_override, _, _ = get_field_details(
|
|
368
|
-
|
|
369
|
-
|
|
368
|
+
self.django_field, self.col_type_override, _, _ = self.get_field_details(
|
|
369
|
+
base_model=base_model,
|
|
370
|
+
field=data['field'],
|
|
371
|
+
report_builder_class=report_builder_class)
|
|
370
372
|
|
|
371
373
|
return report_type, base_model
|
|
372
374
|
|
|
@@ -5,7 +5,7 @@ from django_menus.menu import MenuItem
|
|
|
5
5
|
|
|
6
6
|
from advanced_report_builder.columns import ArrowColumn
|
|
7
7
|
from advanced_report_builder.exceptions import ReportError
|
|
8
|
-
from advanced_report_builder.utils import
|
|
8
|
+
from advanced_report_builder.utils import make_slug_str, get_report_builder_class
|
|
9
9
|
from advanced_report_builder.utils import split_slug
|
|
10
10
|
from advanced_report_builder.views.datatables.utils import TableUtilsMixin
|
|
11
11
|
from advanced_report_builder.views.report import ReportBase
|
|
@@ -72,9 +72,9 @@ class TableView(ReportBase, TableUtilsMixin, DatatableView):
|
|
|
72
72
|
if self.table_report.has_clickable_rows and self.table_report.link_field and self.kwargs.get('enable_links'):
|
|
73
73
|
table.table_classes.append('row_link')
|
|
74
74
|
table.add_columns(ArrowColumn(column_name='arrow_icon'))
|
|
75
|
-
_, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
_, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
76
|
+
field=self.table_report.link_field,
|
|
77
|
+
report_builder_class=report_builder_class)
|
|
78
78
|
if isinstance(col_type_override.field, list):
|
|
79
79
|
field = col_type_override.field[0]
|
|
80
80
|
else:
|
|
@@ -21,8 +21,7 @@ from advanced_report_builder.globals import DATE_FIELDS, NUMBER_FIELDS, ANNOTATI
|
|
|
21
21
|
DATE_FORMAT_TYPES, CURRENCY_COLUMNS, LINK_COLUMNS
|
|
22
22
|
from advanced_report_builder.models import TableReport, ReportQuery, ReportType
|
|
23
23
|
from advanced_report_builder.toggle import RBToggle
|
|
24
|
-
from advanced_report_builder.utils import split_attr,
|
|
25
|
-
get_report_builder_class
|
|
24
|
+
from advanced_report_builder.utils import split_attr, encode_attribute, decode_attribute, get_report_builder_class
|
|
26
25
|
from advanced_report_builder.views.charts_base import ChartBaseFieldForm
|
|
27
26
|
from advanced_report_builder.views.modals_base import QueryBuilderModalBaseMixin, QueryBuilderModalBase
|
|
28
27
|
|
|
@@ -422,9 +421,9 @@ class TableFieldModal(QueryBuilderModalBaseMixin, FormModal):
|
|
|
422
421
|
|
|
423
422
|
data = json.loads(base64.b64decode(self.slug['data']))
|
|
424
423
|
report_builder_class, base_model = self.get_report_builder_class(report_type_id=self.slug['report_type_id'])
|
|
425
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
426
|
-
|
|
427
|
-
|
|
424
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
425
|
+
field=data['field'],
|
|
426
|
+
report_builder_class=report_builder_class)
|
|
428
427
|
if django_field is not None and isinstance(django_field, NUMBER_FIELDS):
|
|
429
428
|
form.add_trigger('annotations_type', 'onchange', [
|
|
430
429
|
{'selector': '#annotations_fields_div', 'values': {'': 'hide'}, 'default': 'show'}])
|
|
@@ -6,7 +6,7 @@ from django_datatables.plugins.column_totals import ColumnTotals
|
|
|
6
6
|
from advanced_report_builder.columns import ReportBuilderDateColumn
|
|
7
7
|
from advanced_report_builder.globals import DATE_FIELDS, NUMBER_FIELDS, CURRENCY_COLUMNS, LINK_COLUMNS
|
|
8
8
|
from advanced_report_builder.globals import DATE_FORMAT_TYPES_DJANGO_FORMAT, ANNOTATION_VALUE_FUNCTIONS
|
|
9
|
-
from advanced_report_builder.utils import split_attr,
|
|
9
|
+
from advanced_report_builder.utils import split_attr, decode_attribute
|
|
10
10
|
from advanced_report_builder.views.report_utils_mixin import ReportUtilsMixin
|
|
11
11
|
|
|
12
12
|
|
|
@@ -106,11 +106,11 @@ class TableUtilsMixin(ReportUtilsMixin):
|
|
|
106
106
|
field_attr['title'] = table_field['title']
|
|
107
107
|
|
|
108
108
|
fields_used.add(field)
|
|
109
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
110
|
+
field=field,
|
|
111
|
+
table=table,
|
|
112
|
+
report_builder_class=report_builder_class,
|
|
113
|
+
field_attr=field_attr)
|
|
114
114
|
|
|
115
115
|
data_attr = split_attr(table_field)
|
|
116
116
|
if int(data_attr.get('display_heading', 1)) == 0:
|
|
@@ -30,7 +30,7 @@ from advanced_report_builder.globals import DATE_FORMAT_TYPES_DJANGO_FORMAT, DAT
|
|
|
30
30
|
DATE_FORMAT_TYPE_SHORT_WORDS_MM_YY
|
|
31
31
|
from advanced_report_builder.models import KanbanReport, KanbanReportLane, ReportType, KanbanReportDescription
|
|
32
32
|
from advanced_report_builder.toggle import RBToggle
|
|
33
|
-
from advanced_report_builder.utils import crispy_modal_link_args,
|
|
33
|
+
from advanced_report_builder.utils import crispy_modal_link_args, get_report_builder_class
|
|
34
34
|
from advanced_report_builder.variable_date import VariableDate
|
|
35
35
|
from advanced_report_builder.views.charts_base import ChartJSTable
|
|
36
36
|
from advanced_report_builder.views.modals_base import QueryBuilderModalBase
|
|
@@ -135,9 +135,9 @@ class KanbanView(DataMergeUtils, ReportBase, FilterQueryMixin, TemplateView):
|
|
|
135
135
|
if kanban_report_lane.kanban_report_description is not None:
|
|
136
136
|
description = kanban_report_lane.kanban_report_description.description
|
|
137
137
|
columns, column_map = self.get_data_merge_columns(base_model=base_model,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
report_builder_class=report_builder_class,
|
|
139
|
+
html=description,
|
|
140
|
+
table=table)
|
|
141
141
|
|
|
142
142
|
table_indexes.append('description')
|
|
143
143
|
table.add_columns(DescriptionColumn(column_name='description',
|
|
@@ -149,9 +149,9 @@ class KanbanView(DataMergeUtils, ReportBase, FilterQueryMixin, TemplateView):
|
|
|
149
149
|
table.table_options['indexes'] = table_indexes
|
|
150
150
|
|
|
151
151
|
if kanban_report_lane.link_field and self.kwargs.get('enable_links'):
|
|
152
|
-
_, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
_, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
153
|
+
field=kanban_report_lane.link_field,
|
|
154
|
+
report_builder_class=report_builder_class)
|
|
155
155
|
if isinstance(col_type_override.field, list):
|
|
156
156
|
field = col_type_override.field[0]
|
|
157
157
|
else:
|
|
@@ -240,15 +240,16 @@ class KanbanView(DataMergeUtils, ReportBase, FilterQueryMixin, TemplateView):
|
|
|
240
240
|
multiple_type = kanban_report_lane.multiple_type
|
|
241
241
|
current_start_date = start_date_and_time
|
|
242
242
|
|
|
243
|
-
_, _, _, field_name = get_field_details(base_model=base_model,
|
|
244
|
-
|
|
245
|
-
|
|
243
|
+
_, _, _, field_name = self.get_field_details(base_model=base_model,
|
|
244
|
+
field=kanban_report_lane.multiple_type_date_field,
|
|
245
|
+
report_builder_class=report_builder_class)
|
|
246
246
|
|
|
247
247
|
end_field_name = None
|
|
248
248
|
if kanban_report_lane.multiple_type_end_date_field:
|
|
249
|
-
_, _, _, end_field_name = get_field_details(
|
|
250
|
-
|
|
251
|
-
|
|
249
|
+
_, _, _, end_field_name = self.get_field_details(
|
|
250
|
+
base_model=base_model,
|
|
251
|
+
field=kanban_report_lane.multiple_type_end_date_field,
|
|
252
|
+
report_builder_class=report_builder_class)
|
|
252
253
|
|
|
253
254
|
sub_lanes = []
|
|
254
255
|
while (current_end_date := self.get_multiple_date(
|
|
@@ -13,9 +13,10 @@ from django_modals.modals import ModelFormModal
|
|
|
13
13
|
from django_modals.widgets.select2 import Select2
|
|
14
14
|
|
|
15
15
|
from advanced_report_builder.field_types import FieldTypes
|
|
16
|
+
from advanced_report_builder.field_utils import ReportBuilderFieldUtils
|
|
16
17
|
from advanced_report_builder.globals import DATE_FIELDS, NUMBER_FIELDS, LINK_COLUMNS, COLOUR_COLUMNS
|
|
17
18
|
from advanced_report_builder.models import ReportQuery, ReportType
|
|
18
|
-
from advanced_report_builder.utils import
|
|
19
|
+
from advanced_report_builder.utils import get_report_builder_class
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class QueryBuilderModelForm(ModelCrispyForm):
|
|
@@ -23,7 +24,7 @@ class QueryBuilderModelForm(ModelCrispyForm):
|
|
|
23
24
|
return StrictButton(button_text, onclick=f'save_modal_{ self.form_id }()', css_class=css_class, **kwargs)
|
|
24
25
|
|
|
25
26
|
|
|
26
|
-
class QueryBuilderModalBaseMixin:
|
|
27
|
+
class QueryBuilderModalBaseMixin(ReportBuilderFieldUtils):
|
|
27
28
|
|
|
28
29
|
@staticmethod
|
|
29
30
|
def get_report_builder_class(report_type_id):
|
|
@@ -56,9 +57,9 @@ class QueryBuilderModalBaseMixin:
|
|
|
56
57
|
for report_builder_field in report_builder_class.fields:
|
|
57
58
|
if (not isinstance(report_builder_field, str) or
|
|
58
59
|
report_builder_field not in report_builder_class.exclude_search_fields):
|
|
59
|
-
django_field, _, columns, _ = get_field_details(base_model=base_model,
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
django_field, _, columns, _ = self.get_field_details(base_model=base_model,
|
|
61
|
+
field=report_builder_field,
|
|
62
|
+
report_builder_class=report_builder_class)
|
|
62
63
|
for column in columns:
|
|
63
64
|
field_types.get_filter(query_builder_filters=query_builder_filters,
|
|
64
65
|
django_field=django_field,
|
|
@@ -169,7 +170,7 @@ class QueryBuilderModalBase(QueryBuilderModalBaseMixin, ModelFormModal):
|
|
|
169
170
|
if (not isinstance(report_builder_field, str) or
|
|
170
171
|
report_builder_field not in report_builder_class.exclude_display_fields or
|
|
171
172
|
(show_order_by_fields and report_builder_field in report_builder_class.order_by_fields)):
|
|
172
|
-
django_field, col_type_override, columns, _ = get_field_details(
|
|
173
|
+
django_field, col_type_override, columns, _ = self.get_field_details(
|
|
173
174
|
base_model=base_model,
|
|
174
175
|
field=report_builder_field,
|
|
175
176
|
report_builder_class=report_builder_class)
|
|
@@ -9,12 +9,13 @@ from django_datatables.columns import CurrencyPenceColumn, CurrencyColumn
|
|
|
9
9
|
|
|
10
10
|
from advanced_report_builder.columns import ReportBuilderCurrencyPenceColumn, ReportBuilderCurrencyColumn, \
|
|
11
11
|
ReportBuilderNumberColumn
|
|
12
|
+
from advanced_report_builder.field_utils import ReportBuilderFieldUtils
|
|
12
13
|
from advanced_report_builder.filter_query import FilterQueryMixin
|
|
13
14
|
from advanced_report_builder.globals import ANNOTATION_FUNCTIONS, ANNOTATION_CHOICE_COUNT
|
|
14
15
|
from advanced_report_builder.utils import decode_attribute
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
class ReportUtilsMixin(FilterQueryMixin):
|
|
18
|
+
class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
|
|
18
19
|
use_annotations = True
|
|
19
20
|
number_field = ReportBuilderNumberColumn
|
|
20
21
|
|
|
@@ -20,7 +20,7 @@ from advanced_report_builder.exceptions import ReportError
|
|
|
20
20
|
from advanced_report_builder.globals import NUMBER_FIELDS, ANNOTATION_CHOICE_SUM, \
|
|
21
21
|
ANNOTATION_CHOICE_AVERAGE_SUM_FROM_COUNT
|
|
22
22
|
from advanced_report_builder.models import SingleValueReport, ReportType
|
|
23
|
-
from advanced_report_builder.utils import
|
|
23
|
+
from advanced_report_builder.utils import get_report_builder_class
|
|
24
24
|
from advanced_report_builder.variable_date import VariableDate
|
|
25
25
|
from advanced_report_builder.views.charts_base import ChartBaseView
|
|
26
26
|
from advanced_report_builder.views.datatables.modal import TableFieldModal, TableFieldForm
|
|
@@ -44,9 +44,9 @@ class SingleValueView(ChartBaseView):
|
|
|
44
44
|
report_builder_class = get_report_builder_class(model=base_model,
|
|
45
45
|
report_type=self.chart_report.report_type)
|
|
46
46
|
|
|
47
|
-
django_field, col_type_override, _, _ = get_field_details(base_model=base_model,
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
django_field, col_type_override, _, _ = self.get_field_details(base_model=base_model,
|
|
48
|
+
field=field,
|
|
49
|
+
report_builder_class=report_builder_class)
|
|
50
50
|
|
|
51
51
|
if (isinstance(django_field, NUMBER_FIELDS) or
|
|
52
52
|
col_type_override is not None and col_type_override.annotations):
|
|
@@ -143,7 +143,7 @@ class SingleValueView(ChartBaseView):
|
|
|
143
143
|
report_builder_class = get_report_builder_class(model=base_model,
|
|
144
144
|
report_type=self.chart_report.report_type)
|
|
145
145
|
|
|
146
|
-
deno_django_field, denominator_col_type_override, _, _ = get_field_details(
|
|
146
|
+
deno_django_field, denominator_col_type_override, _, _ = self.get_field_details(
|
|
147
147
|
base_model=base_model,
|
|
148
148
|
field=denominator_field,
|
|
149
149
|
report_builder_class=report_builder_class)
|
|
@@ -151,7 +151,7 @@ class SingleValueView(ChartBaseView):
|
|
|
151
151
|
(denominator_col_type_override is not None and not denominator_col_type_override.annotations)):
|
|
152
152
|
raise ReportError('denominator is not a number field')
|
|
153
153
|
|
|
154
|
-
num_django_field, numerator_col_type_override, _, _ = get_field_details(
|
|
154
|
+
num_django_field, numerator_col_type_override, _, _ = self.get_field_details(
|
|
155
155
|
base_model=base_model,
|
|
156
156
|
field=denominator_field,
|
|
157
157
|
report_builder_class=report_builder_class)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-advanced-report-builder
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.7
|
|
4
4
|
Summary: Django app that allows you to build reports from modals
|
|
5
5
|
Home-page: https://github.com/django-advance-utils/django-advanced-report-builder
|
|
6
6
|
Author: Thomas Turner
|
|
7
|
-
License: UNKNOWN
|
|
8
|
-
Platform: UNKNOWN
|
|
9
7
|
Classifier: Programming Language :: Python :: 3
|
|
10
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
9
|
Classifier: Operating System :: OS Independent
|
|
@@ -17,5 +15,3 @@ License-File: LICENSE
|
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
# django-advanced-report-builder
|
|
20
|
-
|
|
21
|
-
|
|
@@ -10,6 +10,7 @@ advanced_report_builder/customise.py
|
|
|
10
10
|
advanced_report_builder/duplicate.py
|
|
11
11
|
advanced_report_builder/exceptions.py
|
|
12
12
|
advanced_report_builder/field_types.py
|
|
13
|
+
advanced_report_builder/field_utils.py
|
|
13
14
|
advanced_report_builder/filter_query.py
|
|
14
15
|
advanced_report_builder/generate_series.py
|
|
15
16
|
advanced_report_builder/globals.py
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setuptools.setup(
|
|
7
7
|
name="django-advanced-report-builder",
|
|
8
|
-
version="0.5.
|
|
8
|
+
version="0.5.7",
|
|
9
9
|
author="Thomas Turner",
|
|
10
10
|
description="Django app that allows you to build reports from modals",
|
|
11
11
|
long_description=long_description,
|