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.

Files changed (162) hide show
  1. {django-advanced-report-builder-0.5.5/django_advanced_report_builder.egg-info → django-advanced-report-builder-0.5.7}/PKG-INFO +1 -5
  2. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/columns.py +10 -1
  3. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/utils.py +12 -10
  4. django-advanced-report-builder-0.5.7/advanced_report_builder/field_utils.py +57 -0
  5. django-advanced-report-builder-0.5.7/advanced_report_builder/utils.py +78 -0
  6. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/bar_charts.py +24 -22
  7. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/charts_base.py +15 -13
  8. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/datatables.py +4 -4
  9. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/modal.py +4 -5
  10. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/utils.py +6 -6
  11. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/kanban.py +14 -13
  12. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/modals_base.py +7 -6
  13. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/report_utils_mixin.py +2 -1
  14. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/single_values.py +6 -6
  15. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7/django_advanced_report_builder.egg-info}/PKG-INFO +1 -5
  16. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/SOURCES.txt +1 -0
  17. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/setup.py +1 -1
  18. django-advanced-report-builder-0.5.5/advanced_report_builder/utils.py +0 -129
  19. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/LICENSE +0 -0
  20. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/MANIFEST.in +0 -0
  21. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/README.md +0 -0
  22. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/__init__.py +0 -0
  23. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/admin.py +0 -0
  24. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/apps.py +0 -0
  25. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/customise.py +0 -0
  26. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/__init__.py +0 -0
  27. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/data_merge/widget.py +0 -0
  28. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/duplicate.py +0 -0
  29. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/exceptions.py +0 -0
  30. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/field_types.py +0 -0
  31. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/filter_query.py +0 -0
  32. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/generate_series.py +0 -0
  33. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/globals.py +0 -0
  34. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/includes.py +0 -0
  35. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0001_initial.py +0 -0
  36. {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
  37. {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
  38. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/0004_customreport.py +0 -0
  39. {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
  40. {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
  41. {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
  42. {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
  43. {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
  44. {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
  45. {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
  46. {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
  47. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/migrations/__init__.py +0 -0
  48. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/models.py +0 -0
  49. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/report_builder.py +0 -0
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/toggle.py +0 -0
  145. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/urls.py +0 -0
  146. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/variable_date.py +0 -0
  147. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/__init__.py +0 -0
  148. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/custom.py +0 -0
  149. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/dashboard.py +0 -0
  150. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/datatables/__init__.py +0 -0
  151. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/funnel_charts.py +0 -0
  152. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/line_charts.py +0 -0
  153. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/pie_charts.py +0 -0
  154. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/report.py +0 -0
  155. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/reports.py +0 -0
  156. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/__init__.py +0 -0
  157. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/utils.py +0 -0
  158. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/advanced_report_builder/views/targets/views.py +0 -0
  159. {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
  160. {django-advanced-report-builder-0.5.5 → django-advanced-report-builder-0.5.7}/django_advanced_report_builder.egg-info/requires.txt +0 -0
  161. {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
  162. {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.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.utils import get_field_details, get_report_builder_class
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(base_model=base_model,
15
- field=report_builder_field,
16
- report_builder_class=report_builder_class,
17
- table=table)
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
- field=field,
82
- report_builder_class=report_builder_class,
83
- table=table)
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, get_field_details, \
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(base_model=base_model,
105
- field=start_field_name,
106
- report_builder_class=report_builder_class,
107
- table=table)
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(base_model=base_model,
112
- field=end_field_name,
113
- report_builder_class=report_builder_class,
114
- table=table)
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
- field=field,
482
- report_builder_class=report_builder_class,
483
- table=table)
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
- field=bar_chart_report.date_field,
499
- report_builder_class=report_builder_class,
500
- table=table)[3]
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
- field=bar_chart_report.end_date_field,
504
- report_builder_class=report_builder_class,
505
- table=table)[3]
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, get_field_details, split_attr, get_report_builder_class
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
- field=field_name,
139
- report_builder_class=report_builder_class,
140
- table=table)
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
- field=field,
193
- report_builder_class=report_builder_class,
194
- table=table)
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(base_model=base_model,
368
- field=data['field'],
369
- report_builder_class=report_builder_class)
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 get_field_details, make_slug_str, get_report_builder_class
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
- field=self.table_report.link_field,
77
- report_builder_class=report_builder_class)
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, get_field_details, encode_attribute, decode_attribute, \
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
- field=data['field'],
427
- report_builder_class=report_builder_class)
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, get_field_details, decode_attribute
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
- field=field,
111
- table=table,
112
- report_builder_class=report_builder_class,
113
- field_attr=field_attr)
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, get_field_details, get_report_builder_class
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
- report_builder_class=report_builder_class,
139
- html=description,
140
- table=table)
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
- field=kanban_report_lane.link_field,
154
- report_builder_class=report_builder_class)
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
- field=kanban_report_lane.multiple_type_date_field,
245
- report_builder_class=report_builder_class)
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(base_model=base_model,
250
- field=kanban_report_lane.multiple_type_end_date_field,
251
- report_builder_class=report_builder_class)
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 get_field_details, get_report_builder_class
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
- field=report_builder_field,
61
- report_builder_class=report_builder_class)
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 get_field_details, get_report_builder_class
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
- field=field,
49
- report_builder_class=report_builder_class)
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.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.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,