django-advanced-report-builder 0.7.9__tar.gz → 0.8.1__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 (174) hide show
  1. {django-advanced-report-builder-0.7.9/django_advanced_report_builder.egg-info → django-advanced-report-builder-0.8.1}/PKG-INFO +1 -1
  2. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/columns.py +4 -3
  3. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/field_utils.py +9 -1
  4. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/globals.py +12 -1
  5. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/modal_field.html +3 -0
  6. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/modal.html +4 -0
  7. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/select_column.html +8 -1
  8. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/bar_charts.py +52 -26
  9. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/charts_base.py +61 -4
  10. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/datatables.py +6 -2
  11. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/modal.py +244 -99
  12. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/utils.py +183 -3
  13. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/funnel_charts.py +28 -8
  14. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/line_charts.py +29 -8
  15. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/pie_charts.py +29 -7
  16. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/modal.py +0 -1
  17. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/report_utils_mixin.py +57 -15
  18. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/single_values.py +2 -16
  19. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1/django_advanced_report_builder.egg-info}/PKG-INFO +1 -1
  20. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/setup.py +1 -1
  21. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/LICENSE +0 -0
  22. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/MANIFEST.in +0 -0
  23. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/README.md +0 -0
  24. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/__init__.py +0 -0
  25. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/admin.py +0 -0
  26. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/apps.py +0 -0
  27. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/customise.py +0 -0
  28. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/__init__.py +0 -0
  29. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/utils.py +0 -0
  30. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/widget.py +0 -0
  31. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/duplicate.py +0 -0
  32. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/exceptions.py +0 -0
  33. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/field_types.py +0 -0
  34. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/filter_query.py +0 -0
  35. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/generate_series.py +0 -0
  36. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/includes.py +0 -0
  37. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0001_initial.py +0 -0
  38. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0002_auto_20220209_1657.py +0 -0
  39. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0003_auto_20220215_1219.py +0 -0
  40. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0004_customreport.py +0 -0
  41. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0005_auto_20220303_0958.py +0 -0
  42. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0006_auto_20220310_1147.py +0 -0
  43. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0007_auto_20220322_1939.py +0 -0
  44. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0008_auto_20220404_1144.py +0 -0
  45. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0009_auto_20230428_1554.py +0 -0
  46. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0010_auto_20230428_2033.py +0 -0
  47. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0011_auto_20230620_1449.py +0 -0
  48. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0012_auto_20230718_1642.py +0 -0
  49. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0013_reportqueryorder.py +0 -0
  50. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0014_auto_20240706_2207.py +0 -0
  51. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/__init__.py +0 -0
  52. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/models.py +0 -0
  53. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/report_builder.py +0 -0
  54. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/.DS_Store +0 -0
  55. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/.DS_Store +0 -0
  56. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.esm.js +0 -0
  57. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.js +0 -0
  58. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.min.js +0 -0
  59. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-adapter-moment.min.js +0 -0
  60. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-plugin-datalabels.min.js +0 -0
  61. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chunks/helpers.segment.js +0 -0
  62. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/helpers.esm.js +0 -0
  63. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.js +0 -0
  64. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.min.js +0 -0
  65. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.js +0 -0
  66. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.min.js +0 -0
  67. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dashboard/js/dashboard.js +0 -0
  68. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/.gitignore +0 -0
  69. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/.travis.yml +0 -0
  70. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/LICENSE-DOT.txt +0 -0
  71. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/README.md +0 -0
  72. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/bin/dot-packer +0 -0
  73. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/bower.json +0 -0
  74. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.js +0 -0
  75. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.min.js +0 -0
  76. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doU.js +0 -0
  77. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/index.js +0 -0
  78. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/package.json +0 -0
  79. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.js +0 -0
  80. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.min.js +0 -0
  81. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/.DS_Store +0 -0
  82. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/.DS_Store +0 -0
  83. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.css +0 -0
  84. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.min.css +0 -0
  85. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.css +0 -0
  86. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.min.css +0 -0
  87. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ar.js +0 -0
  88. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.az.js +0 -0
  89. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.bg.js +0 -0
  90. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.cs.js +0 -0
  91. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.da.js +0 -0
  92. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.de.js +0 -0
  93. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.el.js +0 -0
  94. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.en.js +0 -0
  95. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.es.js +0 -0
  96. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fa-IR.js +0 -0
  97. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fr.js +0 -0
  98. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.he.js +0 -0
  99. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.it.js +0 -0
  100. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.nl.js +0 -0
  101. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.no.js +0 -0
  102. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pl.js +0 -0
  103. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-BR.js +0 -0
  104. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-PT.js +0 -0
  105. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ro.js +0 -0
  106. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ru.js +0 -0
  107. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.sq.js +0 -0
  108. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.tr.js +0 -0
  109. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ua.js +0 -0
  110. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.zh-CN.js +0 -0
  111. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/.DS_Store +0 -0
  112. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/.DS_Store +0 -0
  113. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/currency/plugin.js +0 -0
  114. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.js +0 -0
  115. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.min.js +0 -0
  116. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.js +0 -0
  117. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.min.js +0 -0
  118. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/.DS_Store +0 -0
  119. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/dark.scss +0 -0
  120. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/default.scss +0 -0
  121. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-checkbox.scss +0 -0
  122. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-tooltip-errors.scss +0 -0
  123. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_filter-description.scss +0 -0
  124. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_invert.scss +0 -0
  125. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_sortable.scss +0 -0
  126. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/bt-tooltip-errors.scss +0 -0
  127. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/filter-description.scss +0 -0
  128. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/invert.scss +0 -0
  129. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/sortable.scss +0 -0
  130. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/bar/middle.html +0 -0
  131. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/middle.html +0 -0
  132. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/report.html +0 -0
  133. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/line/middle.html +0 -0
  134. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/modal.html +0 -0
  135. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/pie/middle.html +0 -0
  136. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/report.html +0 -0
  137. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/data_merge/data_merge.html +0 -0
  138. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/single_query_builder.html +0 -0
  139. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/modal.html +0 -0
  140. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/onclick_menu.html +0 -0
  141. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/report.html +0 -0
  142. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/select_pivot.html +0 -0
  143. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/description_modal.html +0 -0
  144. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/middle.html +0 -0
  145. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/modal.html +0 -0
  146. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/report.html +0 -0
  147. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/query_builder.html +0 -0
  148. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/query_modal.html +0 -0
  149. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/middle.html +0 -0
  150. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/modal.html +0 -0
  151. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/report.html +0 -0
  152. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/toggle.py +0 -0
  153. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/urls.py +0 -0
  154. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/utils.py +0 -0
  155. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/variable_date.py +0 -0
  156. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/__init__.py +0 -0
  157. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/custom.py +0 -0
  158. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/dashboard.py +0 -0
  159. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/__init__.py +0 -0
  160. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/helpers.py +0 -0
  161. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/kanban.py +0 -0
  162. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/modals_base.py +0 -0
  163. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/__init__.py +0 -0
  164. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/mixin.py +0 -0
  165. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/report.py +0 -0
  166. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/reports.py +0 -0
  167. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/__init__.py +0 -0
  168. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/utils.py +0 -0
  169. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/views.py +0 -0
  170. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/SOURCES.txt +0 -0
  171. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/dependency_links.txt +0 -0
  172. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/requires.txt +0 -0
  173. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/top_level.txt +0 -0
  174. {django-advanced-report-builder-0.7.9 → django-advanced-report-builder-0.8.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-advanced-report-builder
3
- Version: 0.7.9
3
+ Version: 0.8.1
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
@@ -26,19 +26,20 @@ class ReportBuilderDateColumn(ColumnBase):
26
26
 
27
27
  class ReportBuilderNumberColumn(ColumnBase):
28
28
 
29
- def __init__(self, *, decimal_places=0, **kwargs):
29
+ def __init__(self, *, decimal_places=0, trim_zeros=True, **kwargs):
30
30
  if not self.initialise(locals()):
31
31
  return
32
32
  super().__init__(**kwargs)
33
33
  self.decimal_places = f'{{:.{decimal_places}f}}'
34
+ self.trim_zeros = trim_zeros
34
35
 
35
36
  def row_result(self, data, _page_data):
36
37
  number = data.get(self.field)
37
38
  if number is None:
38
39
  return ''
39
40
  else:
40
- number = self.decimal_places.format(data[self.field])
41
- if '.' in number:
41
+ number = self.decimal_places.format(number)
42
+ if self.trim_zeros and '.' in number:
42
43
  return number.rstrip('0').rstrip('.')
43
44
  else:
44
45
  return number
@@ -151,7 +151,7 @@ class ReportBuilderFieldUtils:
151
151
  previous_base_model=None, selected_field_id=None, for_select2=False,
152
152
  pivot_fields=None, allow_annotations_fields=True, field_types=None,
153
153
  column_types=None, search_string=None, show_order_by_fields=False, extra_fields=None,
154
- must_have_django_field=False, allow_pivots=True):
154
+ must_have_django_field=False, allow_pivots=True, include_mathematical_columns=False):
155
155
  if title is None:
156
156
  title = report_builder_class.title
157
157
  if colour is None:
@@ -236,6 +236,14 @@ class ReportBuilderFieldUtils:
236
236
  show_order_by_fields=show_order_by_fields,
237
237
  allow_pivots=local_allow_pivots)
238
238
 
239
+ if include_mathematical_columns:
240
+ fields.extend([{'colour': '#D4AF37', 'field': 'rb_addition', 'label': 'Maths: Addition Field'},
241
+ {'colour': '#D4AF37', 'field': 'rb_subtraction', 'label': 'Maths: Subtraction Field'},
242
+ {'colour': '#D4AF37', 'field': 'rb_times', 'label': 'Maths: Times Field'},
243
+ {'colour': '#D4AF37', 'field': 'rb_division', 'label': 'Maths: Division Field'},
244
+ {'colour': '#D4AF37', 'field': 'rb_percentage', 'label': 'Maths: Percentage Field'}]
245
+ )
246
+
239
247
  @staticmethod
240
248
  def _is_search_match(search_string, title):
241
249
  if search_string is None:
@@ -51,7 +51,6 @@ ANNOTATION_CHOICE_MINIMUM = 3
51
51
  ANNOTATION_CHOICE_COUNT = 4
52
52
  ANNOTATION_CHOICE_AVERAGE_SUM_FROM_COUNT = 5
53
53
 
54
-
55
54
  ANNOTATIONS_CHOICES = [(ANNOTATION_CHOICE_SUM, 'Sum'),
56
55
  (ANNOTATION_CHOICE_MAXIMUM, 'Maximum'),
57
56
  (ANNOTATION_CHOICE_MINIMUM, 'Minimum'),
@@ -64,6 +63,18 @@ ANNOTATION_FUNCTIONS = {ANNOTATION_CHOICE_SUM: Sum,
64
63
  ANNOTATION_CHOICE_COUNT: Count,
65
64
  ANNOTATION_CHOICE_AVERAGE_SUM_FROM_COUNT: Avg}
66
65
 
66
+ ALIGNMENT_CHOICE_LEFT = 0
67
+ ALIGNMENT_CHOICE_CENTRE = 1
68
+ ALIGNMENT_CHOICE_RIGHT = 2
69
+
70
+ ALIGNMENT_CHOICES = [(ALIGNMENT_CHOICE_LEFT, 'Left'),
71
+ (ALIGNMENT_CHOICE_CENTRE, 'Centre'),
72
+ (ALIGNMENT_CHOICE_RIGHT, 'Right')]
73
+
74
+ ALIGNMENT_CLASS = {ALIGNMENT_CHOICE_LEFT: '',
75
+ ALIGNMENT_CHOICE_CENTRE: 'dt-center',
76
+ ALIGNMENT_CHOICE_RIGHT: 'dt-right'}
77
+
67
78
  DATE_FORMAT_TYPE_DD_MM_YY_SLASH = 1
68
79
  DATE_FORMAT_TYPE_DD_MM_YYYY_SLASH = 2
69
80
  DATE_FORMAT_TYPE_MM_DD_YY_SLASH = 3
@@ -3,7 +3,10 @@
3
3
  {% block javascript %}
4
4
  <script>
5
5
  function save_modal_{{ form.form_id }}() {
6
+ try {
6
7
  id_filter.save_query_builder();
8
+ }
9
+ catch (error) {}
7
10
  django_modal.process_commands_lock([{'function': 'post_modal'}]);
8
11
  }
9
12
  </script>
@@ -3,6 +3,10 @@
3
3
  {% block javascript %}
4
4
  <script>
5
5
  function save_modal_{{ form.form_id }}() {
6
+ try {
7
+ id_filter.save_query_builder();
8
+ }
9
+ catch (error) {}
6
10
  django_modal.process_commands_lock([{'function': 'post_modal'}]);
7
11
  }
8
12
  </script>
@@ -88,6 +88,7 @@
88
88
  $({{ command_prefix }}table_field_keys).empty();
89
89
  {{ command_prefix }}available_fields_data = {};
90
90
  $.each(data['fields'], function (key, value) {
91
+
91
92
  {{ command_prefix }}available_fields_data[value.field] = value;
92
93
  $({{ command_prefix }}available_fields_id_name).append({{ command_prefix }}get_field_html(value.field, value.label, value.colour, ''));
93
94
  });
@@ -189,7 +190,13 @@
189
190
  let fields = JSON.parse($({{ command_prefix }}main_field).val())
190
191
  $.each(fields, function (key, value) {
191
192
  let field_data = {{ command_prefix }}available_fields_data[value.field];
192
- $({{ command_prefix }}selection_fields_id_name).append({{ command_prefix }}get_field_html(value.field, value.title, field_data.colour, value.data_attr));
193
+ if(field_data == undefined) {
194
+ $({{ command_prefix }}selection_fields_id_name).append({{ command_prefix }}get_field_html(value.field, value.title, '#D3D3D3'));
195
+ }
196
+ else
197
+ {
198
+ $({{ command_prefix }}selection_fields_id_name).append({{ command_prefix }}get_field_html(value.field, value.title, field_data.colour, value.data_attr));
199
+ }
193
200
  });
194
201
  }
195
202
  }
@@ -74,11 +74,18 @@ class BarChartView(ChartBaseView):
74
74
  date_format = DATE_FORMAT_TYPES_DJANGO_FORMAT[default_format_type]
75
75
  return date_format
76
76
 
77
- def set_extra_number_field_kwargs(self, data_attr, options, multiple_index):
78
- negative_bar_colour = data_attr.get('negative_bar_colour') or '801C70'
79
- positive_bar_colour = data_attr.get('positive_bar_colour') or '801C70'
80
- negative_bar_colour = self.add_colour_offset(negative_bar_colour, multiple_index=multiple_index)
81
- positive_bar_colour = self.add_colour_offset(positive_bar_colour, multiple_index=multiple_index)
77
+ def set_extra_number_field_kwargs(self, data_attr, options, multiple_index, additional_options):
78
+ negative_bar_colour = None
79
+ positive_bar_colour = None
80
+ if additional_options is not None:
81
+ negative_bar_colour = additional_options.get('negative_colour')
82
+ positive_bar_colour = additional_options.get('positive_colour')
83
+ if negative_bar_colour is None or negative_bar_colour == '':
84
+ negative_bar_colour = data_attr.get('negative_bar_colour') or '801C70'
85
+ negative_bar_colour = self.add_colour_offset(negative_bar_colour, multiple_index=multiple_index)
86
+ if positive_bar_colour is None or positive_bar_colour == '':
87
+ positive_bar_colour = data_attr.get('positive_bar_colour') or '801C70'
88
+ positive_bar_colour = self.add_colour_offset(positive_bar_colour, multiple_index=multiple_index)
82
89
 
83
90
  options.update({'colours': {'negative': negative_bar_colour,
84
91
  'positive': positive_bar_colour}})
@@ -309,21 +316,36 @@ class BarChartFieldForm(ChartBaseFieldForm):
309
316
  self.fields['filter'].initial = decode_attribute(data_attr['filter'])
310
317
 
311
318
  self.fields['multiple_columns'] = BooleanField(required=False, widget=RBToggle())
312
-
319
+ self.fields['append_column_title'] = BooleanField(required=False, widget=RBToggle())
313
320
  report_builder_class = get_report_builder_class(model=base_model,
314
321
  report_type=report_type)
315
322
 
316
- fields = []
323
+ self.setup_colour_field(form_fields=self.fields,
324
+ base_model=base_model,
325
+ report_builder_class=report_builder_class,
326
+ name='positive_colour_field',
327
+ data_attr=data_attr)
328
+ self.setup_colour_field(form_fields=self.fields,
329
+ base_model=base_model,
330
+ report_builder_class=report_builder_class,
331
+ name='negative_colour_field',
332
+ data_attr=data_attr)
333
+
334
+ multiple_column_field = []
317
335
  self._get_query_builder_foreign_key_fields(base_model=base_model,
318
336
  report_builder_class=report_builder_class,
319
- fields=fields)
320
-
321
- self.fields['multiple_column_field'] = ChoiceField(choices=fields, required=False)
337
+ fields=multiple_column_field)
338
+ self.fields['multiple_column_field'] = ChoiceField(choices=multiple_column_field,
339
+ required=False,
340
+ widget=Select2())
322
341
 
323
342
  if data_attr.get('multiple_columns') == '1':
324
343
  self.fields['multiple_columns'].initial = True
325
344
  self.fields['multiple_column_field'].initial = data_attr.get('multiple_column_field')
326
345
 
346
+ if data_attr.get('append_column_title') == '1':
347
+ self.fields['append_column_title'].initial = True
348
+
327
349
  super().setup_modal(*args, **kwargs)
328
350
 
329
351
  def get_additional_attributes(self):
@@ -342,7 +364,18 @@ class BarChartFieldForm(ChartBaseFieldForm):
342
364
 
343
365
  if self.cleaned_data['multiple_columns']:
344
366
  attributes.append('multiple_columns-1')
345
- attributes.append(f'multiple_column_field-{self.cleaned_data["multiple_column_field"]}')
367
+
368
+ if self.cleaned_data["multiple_column_field"]:
369
+ attributes.append(f'multiple_column_field-{self.cleaned_data["multiple_column_field"]}')
370
+
371
+ if self.cleaned_data['append_column_title']:
372
+ attributes.append('append_column_title-1')
373
+
374
+ if self.cleaned_data["positive_colour_field"]:
375
+ attributes.append(f'positive_colour_field-{self.cleaned_data["positive_colour_field"]}')
376
+
377
+ if self.cleaned_data["negative_colour_field"]:
378
+ attributes.append(f'negative_colour_field-{self.cleaned_data["negative_colour_field"]}')
346
379
 
347
380
  if attributes:
348
381
  return '-'.join(attributes)
@@ -371,7 +404,6 @@ class BarChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
371
404
  'val': _attr})
372
405
 
373
406
  self.add_command({'function': 'html', 'selector': f'#{selector} span', 'html': form.cleaned_data['title']})
374
- self.add_command({'function': 'save_query_builder_id_filter'})
375
407
  self.add_command({'function': 'update_selection'})
376
408
  return self.command_response('close')
377
409
 
@@ -397,7 +429,12 @@ class BarChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
397
429
  template='django_modals/fields/label_checkbox.html',
398
430
  field_class='col-6 input-group-sm'),
399
431
  Div(
432
+ FieldEx('append_column_title',
433
+ template='django_modals/fields/label_checkbox.html',
434
+ field_class='col-6 input-group-sm'),
400
435
  FieldEx('multiple_column_field'),
436
+ FieldEx('positive_colour_field'),
437
+ FieldEx('negative_colour_field'),
401
438
  css_id='multiple_columns_fields_div'),
402
439
  css_id='filter_fields_div'),
403
440
  css_id='annotations_fields_div')
@@ -424,20 +461,7 @@ class BarChartBreakdownFieldForm(TableFieldForm):
424
461
 
425
462
  class BarChartBreakdownFieldModal(TableFieldModal):
426
463
  form_class = BarChartBreakdownFieldForm
427
-
428
- def form_valid(self, form):
429
- selector = self.slug['selector']
430
-
431
- _attr = form.get_additional_attributes()
432
- self.add_command({'function': 'set_attr',
433
- 'selector': f'#{selector}',
434
- 'attr': 'data-attr',
435
- 'val': _attr})
436
-
437
- self.add_command({'function': 'html', 'selector': f'#{selector} span', 'html': form.cleaned_data['title']})
438
- self.add_command({'function': 'save_query_builder_id_filter'})
439
- self.add_command({'function': 'breakdown_update_selection'})
440
- return self.command_response('close')
464
+ update_selection_command = 'breakdown_update_selection'
441
465
 
442
466
 
443
467
  class BarChartShowBreakdownModal(TableUtilsMixin, Modal):
@@ -481,10 +505,12 @@ class BarChartShowBreakdownModal(TableUtilsMixin, Modal):
481
505
 
482
506
  table_fields = bar_chart_report.breakdown_fields
483
507
  fields_used = set()
508
+ fields_map = {}
484
509
  self.process_query_results(report_builder_class=report_builder_class,
485
510
  table=table,
486
511
  base_model=base_model,
487
512
  fields_used=fields_used,
513
+ fields_map=fields_map,
488
514
  table_fields=table_fields)
489
515
  data_index = int(self.slug['data'])
490
516
  table_field = chart_fields[data_index]
@@ -2,19 +2,20 @@ import base64
2
2
  import json
3
3
  from datetime import timedelta, datetime
4
4
 
5
- from crispy_forms.bootstrap import StrictButton
6
5
  from date_offset.date_offset import DateOffset
7
6
  from dateutil.relativedelta import relativedelta
8
7
  from django.apps import apps
9
8
  from django.core.exceptions import FieldError
10
9
  from django.db import ProgrammingError, DataError
11
10
  from django.db.models import Q
11
+ from django.forms import ChoiceField
12
12
  from django.shortcuts import get_object_or_404
13
+ from django.template.defaultfilters import title
13
14
  from django.utils.safestring import mark_safe
14
15
  from django.views.generic import TemplateView
15
16
  from django_datatables.datatables import DatatableTable
16
17
  from django_menus.menu import MenuItem
17
- from django_modals.forms import CrispyForm
18
+ from django_modals.widgets.select2 import Select2
18
19
 
19
20
  from advanced_report_builder.columns import ReportBuilderDateColumn
20
21
  from advanced_report_builder.exceptions import ReportError
@@ -201,23 +202,53 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
201
202
  data_attr = split_attr(table_field)
202
203
  if data_attr.get('multiple_columns') == '1':
203
204
  query = self.extra_filters(query=table.model.objects)
205
+
204
206
  multiple_column_field = data_attr.get('multiple_column_field')
207
+ if multiple_column_field is None:
208
+ return
205
209
  report_builder_class = self._get_report_builder_class(base_model=base_model,
206
210
  field_str=multiple_column_field,
207
211
  report_builder_class=report_builder_class)
208
- _fields = report_builder_class.default_multiple_column_fields
212
+ try:
213
+ _fields = report_builder_class.default_multiple_column_fields
214
+ except AttributeError:
215
+ return
209
216
  default_multiple_column_fields = [multiple_column_field + '__' + x for x in _fields]
210
217
  order_by = f'{multiple_column_field}__{report_builder_class.default_multiple_pk}'
218
+ positive_colour_field = self.get_field_path(
219
+ field_name=data_attr.get('positive_colour_field'),
220
+ base_model=base_model,
221
+ report_builder_class=report_builder_class,
222
+ table=table)
223
+ if positive_colour_field is not None:
224
+ default_multiple_column_fields.append(positive_colour_field)
225
+
226
+ negative_colour_field = self.get_field_path(
227
+ field_name=data_attr.get('negative_colour_field'),
228
+ base_model=base_model,
229
+ report_builder_class=report_builder_class,
230
+ table=table)
231
+ if negative_colour_field is not None:
232
+ default_multiple_column_fields.append(negative_colour_field)
233
+
211
234
  results = query.order_by(order_by).distinct(multiple_column_field).\
212
235
  values(multiple_column_field, *default_multiple_column_fields)
213
236
 
214
237
  for multiple_index, result in enumerate(results):
238
+
215
239
  suffix = self._set_multiple_title(database_values=result,
216
240
  value_prefix=multiple_column_field,
217
241
  fields=_fields,
218
242
  text=report_builder_class.default_multiple_column_text)
219
243
  extra_filter = Q((multiple_column_field, result[multiple_column_field]))
220
244
 
245
+ additional_options = {}
246
+ if positive_colour_field is not None:
247
+ additional_options['positive_colour'] = result[positive_colour_field]
248
+
249
+ if negative_colour_field is not None:
250
+ additional_options['negative_colour'] = result[negative_colour_field]
251
+
221
252
  self.get_number_field(annotations_type=self.chart_report.axis_value_type,
222
253
  index=f'{index}_{multiple_index}',
223
254
  data_attr=data_attr,
@@ -226,7 +257,8 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
226
257
  col_type_override=col_type_override,
227
258
  extra_filter=extra_filter,
228
259
  title_suffix=suffix,
229
- multiple_index=multiple_index)
260
+ multiple_index=multiple_index,
261
+ additional_options=additional_options)
230
262
 
231
263
  else:
232
264
  self.get_number_field(annotations_type=self.chart_report.axis_value_type,
@@ -237,6 +269,16 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
237
269
  col_type_override=col_type_override)
238
270
  return fields
239
271
 
272
+ def get_field_path(self, field_name, base_model, report_builder_class, table):
273
+ if field_name:
274
+ _, _, _, field_path = self.get_field_details(
275
+ base_model=base_model,
276
+ field=field_name,
277
+ report_builder_class=report_builder_class,
278
+ table=table)
279
+ return field_path
280
+ return None
281
+
240
282
  # noinspection PyUnresolvedReferences
241
283
  @staticmethod
242
284
  def add_colour_offset(colour, multiple_index):
@@ -264,6 +306,7 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
264
306
  self.table.extra_filters = self.extra_filters
265
307
  fields = self.process_query_results(base_model=base_model, table=self.table)
266
308
  self.table.add_columns(*fields)
309
+
267
310
  context['show_toolbar'] = self.show_toolbar
268
311
  context['datatable'] = self.table
269
312
  context['title'] = self.get_title()
@@ -379,3 +422,17 @@ class ChartBaseFieldForm(ReportBuilderFieldUtils, QueryBuilderForm):
379
422
  prefix=f"{prefix}{include_field}__",
380
423
  title_prefix=f"{title_prefix}{include['title']} --> ",
381
424
  previous_base_model=base_model)
425
+
426
+ def setup_colour_field(self, form_fields, base_model, report_builder_class, name, data_attr, label=None):
427
+ colour_fields = []
428
+ self._get_colour_fields(base_model=base_model,
429
+ report_builder_class=report_builder_class,
430
+ fields=colour_fields)
431
+ dropdown_colour_fields = [['', '----']]
432
+ for colour_field in colour_fields:
433
+ dropdown_colour_fields.append([colour_field['id'], colour_field['text']])
434
+
435
+ form_fields[name] = ChoiceField(choices=dropdown_colour_fields, required=False, widget=Select2(), label=label)
436
+ if name in data_attr:
437
+ form_fields[name].initial = data_attr.get(name)
438
+
@@ -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 make_slug_str, get_report_builder_class
8
+ from advanced_report_builder.utils import 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
@@ -35,6 +35,7 @@ class TableView(ReportBase, TableUtilsMixin, DatatableView):
35
35
 
36
36
  self.base_model = self.table_report.get_base_model()
37
37
  self.add_table(self.table_id, model=self.base_model)
38
+
38
39
  try:
39
40
  return super().dispatch(request, *args, **kwargs)
40
41
  except DatatableError as de:
@@ -48,12 +49,14 @@ class TableView(ReportBase, TableUtilsMixin, DatatableView):
48
49
  table_fields = self.table_report.table_fields
49
50
  pivot_fields = self.table_report.pivot_fields
50
51
  fields_used = set()
52
+ fields_map = {}
51
53
  report_builder_class = get_report_builder_class(model=base_model,
52
54
  report_type=self.table_report.report_type)
53
55
  self.process_query_results(report_builder_class=report_builder_class,
54
56
  table=table,
55
57
  base_model=base_model,
56
58
  fields_used=fields_used,
59
+ fields_map=fields_map,
57
60
  table_fields=table_fields,
58
61
  pivot_fields=pivot_fields)
59
62
 
@@ -61,6 +64,8 @@ class TableView(ReportBase, TableUtilsMixin, DatatableView):
61
64
  order_by_field = self.table_report.order_by_field
62
65
  if order_by_field not in fields_used:
63
66
  table.add_columns(f'.{order_by_field}')
67
+ elif order_by_field in fields_map:
68
+ order_by_field = fields_map[order_by_field]
64
69
  if self.table_report.order_by_ascending:
65
70
  table.sort(order_by_field)
66
71
  else:
@@ -134,7 +139,6 @@ class TableView(ReportBase, TableUtilsMixin, DatatableView):
134
139
  *self.duplicate_menu(request=self.request, report_id=chart_report_id)
135
140
  ]
136
141
 
137
-
138
142
  def get_dashboard_class(self, report):
139
143
  pivot_fields = report.tablereport.pivot_fields
140
144
  if pivot_fields is not None and len(pivot_fields) > 0: