django-advanced-report-builder 0.8.0__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.8.0/django_advanced_report_builder.egg-info → django-advanced-report-builder-0.8.1}/PKG-INFO +1 -1
  2. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/select_column.html +8 -1
  3. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/bar_charts.py +49 -11
  4. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/charts_base.py +61 -2
  5. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/modal.py +3 -0
  6. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/funnel_charts.py +28 -7
  7. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/line_charts.py +29 -7
  8. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/pie_charts.py +29 -6
  9. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/report_utils_mixin.py +12 -6
  10. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1/django_advanced_report_builder.egg-info}/PKG-INFO +1 -1
  11. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/setup.py +1 -1
  12. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/LICENSE +0 -0
  13. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/MANIFEST.in +0 -0
  14. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/README.md +0 -0
  15. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/__init__.py +0 -0
  16. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/admin.py +0 -0
  17. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/apps.py +0 -0
  18. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/columns.py +0 -0
  19. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/customise.py +0 -0
  20. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/__init__.py +0 -0
  21. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/utils.py +0 -0
  22. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/data_merge/widget.py +0 -0
  23. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/duplicate.py +0 -0
  24. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/exceptions.py +0 -0
  25. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/field_types.py +0 -0
  26. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/field_utils.py +0 -0
  27. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/filter_query.py +0 -0
  28. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/generate_series.py +0 -0
  29. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/globals.py +0 -0
  30. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/includes.py +0 -0
  31. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0001_initial.py +0 -0
  32. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0002_auto_20220209_1657.py +0 -0
  33. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0003_auto_20220215_1219.py +0 -0
  34. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0004_customreport.py +0 -0
  35. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0005_auto_20220303_0958.py +0 -0
  36. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0006_auto_20220310_1147.py +0 -0
  37. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0007_auto_20220322_1939.py +0 -0
  38. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0008_auto_20220404_1144.py +0 -0
  39. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0009_auto_20230428_1554.py +0 -0
  40. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0010_auto_20230428_2033.py +0 -0
  41. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0011_auto_20230620_1449.py +0 -0
  42. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0012_auto_20230718_1642.py +0 -0
  43. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0013_reportqueryorder.py +0 -0
  44. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/0014_auto_20240706_2207.py +0 -0
  45. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/migrations/__init__.py +0 -0
  46. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/models.py +0 -0
  47. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/report_builder.py +0 -0
  48. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/.DS_Store +0 -0
  49. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/.DS_Store +0 -0
  50. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.esm.js +0 -0
  51. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.js +0 -0
  52. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.min.js +0 -0
  53. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-adapter-moment.min.js +0 -0
  54. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-plugin-datalabels.min.js +0 -0
  55. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chunks/helpers.segment.js +0 -0
  56. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/chart-js/js/helpers.esm.js +0 -0
  57. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.js +0 -0
  58. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.min.js +0 -0
  59. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.js +0 -0
  60. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.min.js +0 -0
  61. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dashboard/js/dashboard.js +0 -0
  62. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/.gitignore +0 -0
  63. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/.travis.yml +0 -0
  64. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/LICENSE-DOT.txt +0 -0
  65. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/README.md +0 -0
  66. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/bin/dot-packer +0 -0
  67. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/bower.json +0 -0
  68. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.js +0 -0
  69. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.min.js +0 -0
  70. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/doU.js +0 -0
  71. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/index.js +0 -0
  72. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/dot/js/package.json +0 -0
  73. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.js +0 -0
  74. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.min.js +0 -0
  75. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/.DS_Store +0 -0
  76. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/.DS_Store +0 -0
  77. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.css +0 -0
  78. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.min.css +0 -0
  79. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.css +0 -0
  80. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.min.css +0 -0
  81. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ar.js +0 -0
  82. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.az.js +0 -0
  83. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.bg.js +0 -0
  84. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.cs.js +0 -0
  85. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.da.js +0 -0
  86. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.de.js +0 -0
  87. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.el.js +0 -0
  88. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.en.js +0 -0
  89. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.es.js +0 -0
  90. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fa-IR.js +0 -0
  91. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fr.js +0 -0
  92. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.he.js +0 -0
  93. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.it.js +0 -0
  94. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.nl.js +0 -0
  95. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.no.js +0 -0
  96. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pl.js +0 -0
  97. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-BR.js +0 -0
  98. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-PT.js +0 -0
  99. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ro.js +0 -0
  100. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ru.js +0 -0
  101. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.sq.js +0 -0
  102. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.tr.js +0 -0
  103. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ua.js +0 -0
  104. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.zh-CN.js +0 -0
  105. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/.DS_Store +0 -0
  106. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/.DS_Store +0 -0
  107. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/currency/plugin.js +0 -0
  108. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.js +0 -0
  109. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.min.js +0 -0
  110. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.js +0 -0
  111. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.min.js +0 -0
  112. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/.DS_Store +0 -0
  113. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/dark.scss +0 -0
  114. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/default.scss +0 -0
  115. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-checkbox.scss +0 -0
  116. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-tooltip-errors.scss +0 -0
  117. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_filter-description.scss +0 -0
  118. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_invert.scss +0 -0
  119. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_sortable.scss +0 -0
  120. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/bt-tooltip-errors.scss +0 -0
  121. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/filter-description.scss +0 -0
  122. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/invert.scss +0 -0
  123. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/sortable.scss +0 -0
  124. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/bar/middle.html +0 -0
  125. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/middle.html +0 -0
  126. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/report.html +0 -0
  127. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/line/middle.html +0 -0
  128. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/modal.html +0 -0
  129. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/modal_field.html +0 -0
  130. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/pie/middle.html +0 -0
  131. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/charts/report.html +0 -0
  132. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/data_merge/data_merge.html +0 -0
  133. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/modal.html +0 -0
  134. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/single_query_builder.html +0 -0
  135. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/modal.html +0 -0
  136. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/onclick_menu.html +0 -0
  137. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/report.html +0 -0
  138. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/datatables/select_pivot.html +0 -0
  139. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/description_modal.html +0 -0
  140. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/middle.html +0 -0
  141. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/modal.html +0 -0
  142. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/kanban/report.html +0 -0
  143. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/query_builder.html +0 -0
  144. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/query_modal.html +0 -0
  145. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/middle.html +0 -0
  146. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/modal.html +0 -0
  147. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/templates/advanced_report_builder/single_values/report.html +0 -0
  148. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/toggle.py +0 -0
  149. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/urls.py +0 -0
  150. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/utils.py +0 -0
  151. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/variable_date.py +0 -0
  152. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/__init__.py +0 -0
  153. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/custom.py +0 -0
  154. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/dashboard.py +0 -0
  155. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/__init__.py +0 -0
  156. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/datatables.py +0 -0
  157. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/datatables/utils.py +0 -0
  158. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/helpers.py +0 -0
  159. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/kanban.py +0 -0
  160. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/modals_base.py +0 -0
  161. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/__init__.py +0 -0
  162. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/mixin.py +0 -0
  163. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/query_modal/modal.py +0 -0
  164. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/report.py +0 -0
  165. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/reports.py +0 -0
  166. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/single_values.py +0 -0
  167. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/__init__.py +0 -0
  168. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/utils.py +0 -0
  169. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/advanced_report_builder/views/targets/views.py +0 -0
  170. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/SOURCES.txt +0 -0
  171. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/dependency_links.txt +0 -0
  172. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/requires.txt +0 -0
  173. {django-advanced-report-builder-0.8.0 → django-advanced-report-builder-0.8.1}/django_advanced_report_builder.egg-info/top_level.txt +0 -0
  174. {django-advanced-report-builder-0.8.0 → 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.8.0
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
@@ -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)
@@ -396,7 +429,12 @@ class BarChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
396
429
  template='django_modals/fields/label_checkbox.html',
397
430
  field_class='col-6 input-group-sm'),
398
431
  Div(
432
+ FieldEx('append_column_title',
433
+ template='django_modals/fields/label_checkbox.html',
434
+ field_class='col-6 input-group-sm'),
399
435
  FieldEx('multiple_column_field'),
436
+ FieldEx('positive_colour_field'),
437
+ FieldEx('negative_colour_field'),
400
438
  css_id='multiple_columns_fields_div'),
401
439
  css_id='filter_fields_div'),
402
440
  css_id='annotations_fields_div')
@@ -8,11 +8,14 @@ from django.apps import apps
8
8
  from django.core.exceptions import FieldError
9
9
  from django.db import ProgrammingError, DataError
10
10
  from django.db.models import Q
11
+ from django.forms import ChoiceField
11
12
  from django.shortcuts import get_object_or_404
13
+ from django.template.defaultfilters import title
12
14
  from django.utils.safestring import mark_safe
13
15
  from django.views.generic import TemplateView
14
16
  from django_datatables.datatables import DatatableTable
15
17
  from django_menus.menu import MenuItem
18
+ from django_modals.widgets.select2 import Select2
16
19
 
17
20
  from advanced_report_builder.columns import ReportBuilderDateColumn
18
21
  from advanced_report_builder.exceptions import ReportError
@@ -199,23 +202,53 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
199
202
  data_attr = split_attr(table_field)
200
203
  if data_attr.get('multiple_columns') == '1':
201
204
  query = self.extra_filters(query=table.model.objects)
205
+
202
206
  multiple_column_field = data_attr.get('multiple_column_field')
207
+ if multiple_column_field is None:
208
+ return
203
209
  report_builder_class = self._get_report_builder_class(base_model=base_model,
204
210
  field_str=multiple_column_field,
205
211
  report_builder_class=report_builder_class)
206
- _fields = report_builder_class.default_multiple_column_fields
212
+ try:
213
+ _fields = report_builder_class.default_multiple_column_fields
214
+ except AttributeError:
215
+ return
207
216
  default_multiple_column_fields = [multiple_column_field + '__' + x for x in _fields]
208
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
+
209
234
  results = query.order_by(order_by).distinct(multiple_column_field).\
210
235
  values(multiple_column_field, *default_multiple_column_fields)
211
236
 
212
237
  for multiple_index, result in enumerate(results):
238
+
213
239
  suffix = self._set_multiple_title(database_values=result,
214
240
  value_prefix=multiple_column_field,
215
241
  fields=_fields,
216
242
  text=report_builder_class.default_multiple_column_text)
217
243
  extra_filter = Q((multiple_column_field, result[multiple_column_field]))
218
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
+
219
252
  self.get_number_field(annotations_type=self.chart_report.axis_value_type,
220
253
  index=f'{index}_{multiple_index}',
221
254
  data_attr=data_attr,
@@ -224,7 +257,8 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
224
257
  col_type_override=col_type_override,
225
258
  extra_filter=extra_filter,
226
259
  title_suffix=suffix,
227
- multiple_index=multiple_index)
260
+ multiple_index=multiple_index,
261
+ additional_options=additional_options)
228
262
 
229
263
  else:
230
264
  self.get_number_field(annotations_type=self.chart_report.axis_value_type,
@@ -235,6 +269,16 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
235
269
  col_type_override=col_type_override)
236
270
  return fields
237
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
+
238
282
  # noinspection PyUnresolvedReferences
239
283
  @staticmethod
240
284
  def add_colour_offset(colour, multiple_index):
@@ -262,6 +306,7 @@ class ChartBaseView(ReportBase, ReportUtilsMixin, TemplateView):
262
306
  self.table.extra_filters = self.extra_filters
263
307
  fields = self.process_query_results(base_model=base_model, table=self.table)
264
308
  self.table.add_columns(*fields)
309
+
265
310
  context['show_toolbar'] = self.show_toolbar
266
311
  context['datatable'] = self.table
267
312
  context['title'] = self.get_title()
@@ -377,3 +422,17 @@ class ChartBaseFieldForm(ReportBuilderFieldUtils, QueryBuilderForm):
377
422
  prefix=f"{prefix}{include_field}__",
378
423
  title_prefix=f"{title_prefix}{include['title']} --> ",
379
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
+
@@ -281,6 +281,9 @@ class TableFieldForm(ChartBaseFieldForm):
281
281
  if data_attr.get('multiple_columns') == '1':
282
282
  self.fields['multiple_columns'].initial = True
283
283
  self.fields['multiple_column_field'].initial = data_attr.get('multiple_column_field')
284
+ if data_attr.get('append_column_title') == '1':
285
+ self.fields['append_column_title'].initial = True
286
+
284
287
 
285
288
  def setup_standard_mathematical_fields(self, data, data_attr):
286
289
 
@@ -37,9 +37,13 @@ class FunnelChartView(ChartBaseView):
37
37
  context['funnel_chart_report'] = self.chart_report
38
38
  return context
39
39
 
40
- def set_extra_number_field_kwargs(self, data_attr, options, multiple_index):
41
- funnel_colour = data_attr.get('funnel_colour') or '801C70'
42
- funnel_colour = self.add_colour_offset(funnel_colour, multiple_index=multiple_index)
40
+ def set_extra_number_field_kwargs(self, data_attr, options, multiple_index, additional_options):
41
+ funnel_colour = None
42
+ if additional_options is not None:
43
+ funnel_colour = additional_options.get('positive_colour')
44
+ if funnel_colour is None or funnel_colour == '':
45
+ funnel_colour = data_attr.get('funnel_colour') or '801C70'
46
+ funnel_colour = self.add_colour_offset(funnel_colour, multiple_index=multiple_index)
43
47
  options.update({'colour': funnel_colour})
44
48
 
45
49
  def edit_report_menu(self, request, chart_report_id, slug_str):
@@ -110,20 +114,29 @@ class FunnelChartFieldForm(ChartBaseFieldForm):
110
114
  self.fields['filter'].initial = decode_attribute(data_attr['filter'])
111
115
 
112
116
  self.fields['multiple_columns'] = BooleanField(required=False, widget=RBToggle())
117
+ self.fields['append_column_title'] = BooleanField(required=False, widget=RBToggle())
113
118
 
114
119
  report_builder_class = get_report_builder_class(model=base_model,
115
120
  report_type=report_type)
116
-
117
- fields = []
121
+ self.setup_colour_field(form_fields=self.fields,
122
+ base_model=base_model,
123
+ report_builder_class=report_builder_class,
124
+ name='positive_colour_field',
125
+ data_attr=data_attr,
126
+ label='Funnel colour field')
127
+
128
+ multiple_column_field = []
118
129
  self._get_query_builder_foreign_key_fields(base_model=base_model,
119
130
  report_builder_class=report_builder_class,
120
- fields=fields)
131
+ fields=multiple_column_field)
121
132
 
122
- self.fields['multiple_column_field'] = ChoiceField(choices=fields, required=False)
123
133
 
134
+ self.fields['multiple_column_field'] = ChoiceField(choices=multiple_column_field, required=False)
124
135
  if data_attr.get('multiple_columns') == '1':
125
136
  self.fields['multiple_columns'].initial = True
126
137
  self.fields['multiple_column_field'].initial = data_attr.get('multiple_column_field')
138
+ if data_attr.get('append_column_title') == '1':
139
+ self.fields['append_column_title'].initial = True
127
140
 
128
141
  super().setup_modal(*args, **kwargs)
129
142
 
@@ -141,7 +154,11 @@ class FunnelChartFieldForm(ChartBaseFieldForm):
141
154
  attributes.append(f'filter-{b64_filter}')
142
155
  if self.cleaned_data['multiple_columns']:
143
156
  attributes.append('multiple_columns-1')
157
+ if self.cleaned_data["positive_colour_field"]:
158
+ attributes.append(f'positive_colour_field-{self.cleaned_data["positive_colour_field"]}')
144
159
  attributes.append(f'multiple_column_field-{self.cleaned_data["multiple_column_field"]}')
160
+ if self.cleaned_data['append_column_title']:
161
+ attributes.append('append_column_title-1')
145
162
 
146
163
  if attributes:
147
164
  return '-'.join(attributes)
@@ -194,7 +211,11 @@ class FunnelChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
194
211
  template='django_modals/fields/label_checkbox.html',
195
212
  field_class='col-6 input-group-sm'),
196
213
  Div(
214
+ FieldEx('append_column_title',
215
+ template='django_modals/fields/label_checkbox.html',
216
+ field_class='col-6 input-group-sm'),
197
217
  FieldEx('multiple_column_field'),
218
+ FieldEx('positive_colour_field'),
198
219
  css_id='multiple_columns_fields_div'),
199
220
  css_id='filter_fields_div'),
200
221
  css_id='annotations_fields_div')
@@ -91,9 +91,13 @@ class LineChartView(ChartBaseView):
91
91
  context['line_chart_report'] = self.chart_report
92
92
  return context
93
93
 
94
- def set_extra_number_field_kwargs(self, data_attr, options, multiple_index):
95
- line_colour = data_attr.get('line_colour') or '801C70'
96
- line_colour = self.add_colour_offset(line_colour, multiple_index=multiple_index)
94
+ def set_extra_number_field_kwargs(self, data_attr, options, multiple_index, additional_options):
95
+ line_colour = None
96
+ if additional_options is not None:
97
+ line_colour = additional_options.get('positive_colour')
98
+ if line_colour is None or line_colour == '':
99
+ line_colour = data_attr.get('line_colour') or '801C70'
100
+ line_colour = self.add_colour_offset(line_colour, multiple_index=multiple_index)
97
101
  options.update({'colour': line_colour})
98
102
 
99
103
  def edit_report_menu(self, request, chart_report_id, slug_str):
@@ -207,26 +211,36 @@ class LineChartFieldForm(ChartBaseFieldForm):
207
211
 
208
212
  self.fields['has_filter'] = BooleanField(required=False, widget=RBToggle())
209
213
  self.fields['filter'] = CharField(required=False)
210
-
211
214
  if data_attr.get('has_filter') == '1':
212
215
  self.fields['has_filter'].initial = True
213
216
  if 'filter' in data_attr:
214
217
  self.fields['filter'].initial = decode_attribute(data_attr['filter'])
215
218
 
216
219
  self.fields['multiple_columns'] = BooleanField(required=False, widget=RBToggle())
220
+ self.fields['append_column_title'] = BooleanField(required=False, widget=RBToggle())
217
221
  report_builder_class = get_report_builder_class(model=base_model,
218
222
  report_type=report_type)
219
- fields = []
223
+
224
+ self.setup_colour_field(form_fields=self.fields,
225
+ base_model=base_model,
226
+ report_builder_class=report_builder_class,
227
+ name='positive_colour_field',
228
+ data_attr=data_attr,
229
+ label='Line colour field')
230
+ multiple_column_field = []
220
231
  self._get_query_builder_foreign_key_fields(base_model=base_model,
221
232
  report_builder_class=report_builder_class,
222
- fields=fields)
233
+ fields=multiple_column_field)
223
234
 
224
- self.fields['multiple_column_field'] = ChoiceField(choices=fields, required=False)
235
+ self.fields['multiple_column_field'] = ChoiceField(choices=multiple_column_field, required=False)
225
236
 
226
237
  if data_attr.get('multiple_columns') == '1':
227
238
  self.fields['multiple_columns'].initial = True
228
239
  self.fields['multiple_column_field'].initial = data_attr.get('multiple_column_field')
229
240
 
241
+ if data_attr.get('append_column_title') == '1':
242
+ self.fields['append_column_title'].initial = True
243
+
230
244
  super().setup_modal(*args, **kwargs)
231
245
 
232
246
  def get_additional_attributes(self):
@@ -243,7 +257,11 @@ class LineChartFieldForm(ChartBaseFieldForm):
243
257
  attributes.append(f'filter-{b64_filter}')
244
258
  if self.cleaned_data['multiple_columns']:
245
259
  attributes.append('multiple_columns-1')
260
+ if self.cleaned_data["positive_colour_field"]:
261
+ attributes.append(f'positive_colour_field-{self.cleaned_data["positive_colour_field"]}')
246
262
  attributes.append(f'multiple_column_field-{self.cleaned_data["multiple_column_field"]}')
263
+ if self.cleaned_data['append_column_title']:
264
+ attributes.append('append_column_title-1')
247
265
 
248
266
  if attributes:
249
267
  return '-'.join(attributes)
@@ -296,7 +314,11 @@ class LineChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
296
314
  template='django_modals/fields/label_checkbox.html',
297
315
  field_class='col-6 input-group-sm'),
298
316
  Div(
317
+ FieldEx('append_column_title',
318
+ template='django_modals/fields/label_checkbox.html',
319
+ field_class='col-6 input-group-sm'),
299
320
  FieldEx('multiple_column_field'),
321
+ FieldEx('positive_colour_field'),
300
322
  css_id='multiple_columns_fields_div'),
301
323
  css_id='filter_fields_div'),
302
324
  css_id='annotations_fields_div')
@@ -35,9 +35,13 @@ class PieChartView(ChartBaseView):
35
35
  context['pie_chart_report'] = self.chart_report
36
36
  return context
37
37
 
38
- def set_extra_number_field_kwargs(self, data_attr, options, multiple_index):
39
- pie_colour = data_attr.get('pie_colour') or '801C70'
40
- pie_colour = self.add_colour_offset(pie_colour, multiple_index=multiple_index)
38
+ def set_extra_number_field_kwargs(self, data_attr, options, multiple_index, additional_options):
39
+ pie_colour = None
40
+ if additional_options is not None:
41
+ pie_colour = additional_options.get('positive_colour')
42
+ if pie_colour is None or pie_colour == '':
43
+ pie_colour = data_attr.get('pie_colour') or '801C70'
44
+ pie_colour = self.add_colour_offset(pie_colour, multiple_index=multiple_index)
41
45
  options.update({'colour': pie_colour})
42
46
 
43
47
  def edit_report_menu(self, request, chart_report_id, slug_str):
@@ -109,18 +113,29 @@ class PieChartFieldForm(ChartBaseFieldForm):
109
113
  self.fields['filter'].initial = decode_attribute(data_attr['filter'])
110
114
 
111
115
  self.fields['multiple_columns'] = BooleanField(required=False, widget=RBToggle())
116
+ self.fields['append_column_title'] = BooleanField(required=False, widget=RBToggle())
112
117
  report_builder_class = get_report_builder_class(model=base_model,
113
118
  report_type=report_type)
114
- fields = []
119
+
120
+ self.setup_colour_field(form_fields=self.fields,
121
+ base_model=base_model,
122
+ report_builder_class=report_builder_class,
123
+ name='positive_colour_field',
124
+ data_attr=data_attr,
125
+ label='Pie colour field')
126
+
127
+ multiple_column_field = []
115
128
  self._get_query_builder_foreign_key_fields(base_model=base_model,
116
129
  report_builder_class=report_builder_class,
117
- fields=fields)
130
+ fields=multiple_column_field)
118
131
 
119
- self.fields['multiple_column_field'] = ChoiceField(choices=fields, required=False)
132
+ self.fields['multiple_column_field'] = ChoiceField(choices=multiple_column_field, required=False)
120
133
 
121
134
  if data_attr.get('multiple_columns') == '1':
122
135
  self.fields['multiple_columns'].initial = True
123
136
  self.fields['multiple_column_field'].initial = data_attr.get('multiple_column_field')
137
+ if data_attr.get('append_column_title') == '1':
138
+ self.fields['append_column_title'].initial = True
124
139
 
125
140
  super().setup_modal(*args, **kwargs)
126
141
 
@@ -138,7 +153,11 @@ class PieChartFieldForm(ChartBaseFieldForm):
138
153
  attributes.append(f'filter-{b64_filter}')
139
154
  if self.cleaned_data['multiple_columns']:
140
155
  attributes.append('multiple_columns-1')
156
+ if self.cleaned_data["positive_colour_field"]:
157
+ attributes.append(f'positive_colour_field-{self.cleaned_data["positive_colour_field"]}')
141
158
  attributes.append(f'multiple_column_field-{self.cleaned_data["multiple_column_field"]}')
159
+ if self.cleaned_data['append_column_title']:
160
+ attributes.append('append_column_title-1')
142
161
 
143
162
  if attributes:
144
163
  return '-'.join(attributes)
@@ -191,7 +210,11 @@ class PieChartFieldModal(QueryBuilderModalBaseMixin, FormModal):
191
210
  template='django_modals/fields/label_checkbox.html',
192
211
  field_class='col-6 input-group-sm'),
193
212
  Div(
213
+ FieldEx('append_column_title',
214
+ template='django_modals/fields/label_checkbox.html',
215
+ field_class='col-6 input-group-sm'),
194
216
  FieldEx('multiple_column_field'),
217
+ FieldEx('positive_colour_field'),
195
218
  css_id='multiple_columns_fields_div'),
196
219
  css_id='filter_fields_div'),
197
220
  css_id='annotations_fields_div')
@@ -21,7 +21,7 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
21
21
 
22
22
  def get_number_field(self, annotations_type, index, table_field, data_attr, fields, col_type_override,
23
23
  extra_filter=None, title_suffix='', multiple_index=0, decimal_places=None,
24
- convert_currency_fields=False, totals=None, divider=None):
24
+ convert_currency_fields=False, totals=None, divider=None, additional_options=None):
25
25
  field_name = table_field['field']
26
26
  alignment_class = ALIGNMENT_CLASS.get(int(data_attr.get('alignment', 0)))
27
27
  new_field_name = field_name
@@ -38,6 +38,8 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
38
38
 
39
39
  if int(data_attr.get('display_heading', 1)) == 0:
40
40
  title = ''
41
+ elif int(data_attr.get('append_column_title', 0)) == 0:
42
+ title = title_suffix
41
43
  else:
42
44
  title = title_suffix + ' ' + table_field.get('title')
43
45
  if col_type_override:
@@ -63,7 +65,8 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
63
65
  field.title = title
64
66
  self.set_extra_number_field_kwargs(data_attr=data_attr,
65
67
  options=field.options,
66
- multiple_index=multiple_index)
68
+ multiple_index=multiple_index,
69
+ additional_options=additional_options)
67
70
 
68
71
  elif annotations_type == ANNOTATION_CHOICE_COUNT:
69
72
  new_field_name = self.get_new_annotation_field_name(annotations_type=annotations_type,
@@ -83,7 +86,8 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
83
86
  number_function_kwargs['options'] = {}
84
87
  self.set_extra_number_field_kwargs(data_attr=data_attr,
85
88
  options=number_function_kwargs['options'],
86
- multiple_index=multiple_index)
89
+ multiple_index=multiple_index,
90
+ additional_options=additional_options)
87
91
  if annotation_filter:
88
92
  function = function_type(raw_field_name, filter=annotation_filter)
89
93
  else:
@@ -132,7 +136,8 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
132
136
  field.field = new_field_name
133
137
  self.set_extra_number_field_kwargs(data_attr=data_attr,
134
138
  options=field.options,
135
- multiple_index=multiple_index)
139
+ multiple_index=multiple_index,
140
+ additional_options=additional_options)
136
141
  fields.append(field)
137
142
  else:
138
143
  number_function_kwargs = {'title': title}
@@ -143,7 +148,8 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
143
148
  number_function_kwargs['options'] = {}
144
149
  self.set_extra_number_field_kwargs(data_attr=data_attr,
145
150
  options=number_function_kwargs['options'],
146
- multiple_index=multiple_index)
151
+ multiple_index=multiple_index,
152
+ additional_options=additional_options)
147
153
 
148
154
  new_field_name = self.get_new_annotation_field_name(annotations_type=annotations_type,
149
155
  field_name=field_name,
@@ -185,7 +191,7 @@ class ReportUtilsMixin(ReportBuilderFieldUtils, FilterQueryMixin):
185
191
  return decode_attribute(annotation_column_id)
186
192
  return f'{annotations_type}_{field_name}_{index}'
187
193
 
188
- def set_extra_number_field_kwargs(self, data_attr, options, multiple_index):
194
+ def set_extra_number_field_kwargs(self, data_attr, options, multiple_index, additional_options):
189
195
  pass
190
196
 
191
197
  # noinspection PyUnusedLocal,PyMethodMayBeStatic
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-advanced-report-builder
3
- Version: 0.8.0
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
@@ -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.8.0",
8
+ version="0.8.1",
9
9
  author="Thomas Turner",
10
10
  description="Django app that allows you to build reports from modals",
11
11
  long_description=long_description,