django-advanced-report-builder 0.9.1__tar.gz → 0.9.3__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 (180) hide show
  1. {django-advanced-report-builder-0.9.1/django_advanced_report_builder.egg-info → django-advanced-report-builder-0.9.3}/PKG-INFO +1 -1
  2. django-advanced-report-builder-0.9.3/advanced_report_builder/migrations/0015_report_user_created_report_user_updated.py +26 -0
  3. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/models.py +30 -8
  4. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/variable_date.py +48 -18
  5. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/datatables/modal.py +3 -7
  6. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/kanban.py +18 -4
  7. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/modals_base.py +5 -1
  8. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/query_modal/modal.py +10 -0
  9. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/single_values.py +46 -37
  10. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3/django_advanced_report_builder.egg-info}/PKG-INFO +1 -1
  11. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/django_advanced_report_builder.egg-info/SOURCES.txt +1 -0
  12. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/setup.py +1 -1
  13. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/LICENSE +0 -0
  14. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/MANIFEST.in +0 -0
  15. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/README.md +0 -0
  16. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/.DS_Store +0 -0
  17. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/__init__.py +0 -0
  18. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/admin.py +0 -0
  19. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/apps.py +0 -0
  20. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/column_types.py +0 -0
  21. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/columns.py +0 -0
  22. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/customise.py +0 -0
  23. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/data_merge/__init__.py +0 -0
  24. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/data_merge/utils.py +0 -0
  25. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/data_merge/widget.py +0 -0
  26. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/duplicate.py +0 -0
  27. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/exceptions.py +0 -0
  28. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/field_types.py +0 -0
  29. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/field_utils.py +0 -0
  30. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/filter_query.py +0 -0
  31. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/generate_series.py +0 -0
  32. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/globals.py +0 -0
  33. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/includes.py +0 -0
  34. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0001_initial.py +0 -0
  35. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0002_auto_20220209_1657.py +0 -0
  36. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0003_auto_20220215_1219.py +0 -0
  37. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0004_customreport.py +0 -0
  38. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0005_auto_20220303_0958.py +0 -0
  39. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0006_auto_20220310_1147.py +0 -0
  40. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0007_auto_20220322_1939.py +0 -0
  41. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0008_auto_20220404_1144.py +0 -0
  42. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0009_auto_20230428_1554.py +0 -0
  43. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0010_auto_20230428_2033.py +0 -0
  44. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0011_auto_20230620_1449.py +0 -0
  45. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0012_auto_20230718_1642.py +0 -0
  46. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0013_reportqueryorder.py +0 -0
  47. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/0014_auto_20240706_2207.py +0 -0
  48. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/migrations/__init__.py +0 -0
  49. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/report_builder.py +0 -0
  50. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/signals.py +0 -0
  51. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/.DS_Store +0 -0
  52. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/.DS_Store +0 -0
  53. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.esm.js +0 -0
  54. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.js +0 -0
  55. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chart.min.js +0 -0
  56. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-adapter-moment.min.js +0 -0
  57. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chartjs-plugin-datalabels.min.js +0 -0
  58. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/chunks/helpers.segment.js +0 -0
  59. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/chart-js/js/helpers.esm.js +0 -0
  60. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.js +0 -0
  61. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/d3/js/d3.min.js +0 -0
  62. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.js +0 -0
  63. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/d3-funnel/js/d3-funnel.min.js +0 -0
  64. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dashboard/js/dashboard.js +0 -0
  65. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/.gitignore +0 -0
  66. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/.travis.yml +0 -0
  67. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/LICENSE-DOT.txt +0 -0
  68. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/README.md +0 -0
  69. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/bin/dot-packer +0 -0
  70. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/bower.json +0 -0
  71. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.js +0 -0
  72. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/doT.min.js +0 -0
  73. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/doU.js +0 -0
  74. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/index.js +0 -0
  75. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/dot/js/package.json +0 -0
  76. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/fullcalendar/.DS_Store +0 -0
  77. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.js +0 -0
  78. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/jquery_extendext/js/jQuery.extendext.min.js +0 -0
  79. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/.DS_Store +0 -0
  80. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/css/.DS_Store +0 -0
  81. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.css +0 -0
  82. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.dark.min.css +0 -0
  83. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.css +0 -0
  84. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/css/query-builder.default.min.css +0 -0
  85. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ar.js +0 -0
  86. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.az.js +0 -0
  87. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.bg.js +0 -0
  88. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.cs.js +0 -0
  89. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.da.js +0 -0
  90. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.de.js +0 -0
  91. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.el.js +0 -0
  92. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.en.js +0 -0
  93. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.es.js +0 -0
  94. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fa-IR.js +0 -0
  95. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.fr.js +0 -0
  96. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.he.js +0 -0
  97. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.it.js +0 -0
  98. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.nl.js +0 -0
  99. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.no.js +0 -0
  100. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pl.js +0 -0
  101. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-BR.js +0 -0
  102. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.pt-PT.js +0 -0
  103. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ro.js +0 -0
  104. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ru.js +0 -0
  105. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.sq.js +0 -0
  106. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.tr.js +0 -0
  107. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.ua.js +0 -0
  108. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/i18n/query-builder.zh-CN.js +0 -0
  109. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/.DS_Store +0 -0
  110. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/.DS_Store +0 -0
  111. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/plugins/currency/plugin.js +0 -0
  112. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.js +0 -0
  113. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.min.js +0 -0
  114. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.js +0 -0
  115. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/js/query-builder.standalone.min.js +0 -0
  116. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/.DS_Store +0 -0
  117. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/dark.scss +0 -0
  118. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/default.scss +0 -0
  119. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-checkbox.scss +0 -0
  120. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_bt-tooltip-errors.scss +0 -0
  121. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_filter-description.scss +0 -0
  122. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_invert.scss +0 -0
  123. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/_sortable.scss +0 -0
  124. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/bt-tooltip-errors.scss +0 -0
  125. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/filter-description.scss +0 -0
  126. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/invert.scss +0 -0
  127. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/static/advanced_report_builder/query_builder/scss/plugins/sortable.scss +0 -0
  128. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/bar/middle.html +0 -0
  129. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/middle.html +0 -0
  130. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/funnel/report.html +0 -0
  131. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/line/middle.html +0 -0
  132. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/modal.html +0 -0
  133. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/modal_field.html +0 -0
  134. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/pie/middle.html +0 -0
  135. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/charts/report.html +0 -0
  136. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/data_merge/data_merge.html +0 -0
  137. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/modal.html +0 -0
  138. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/fields/single_query_builder.html +0 -0
  139. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/modal.html +0 -0
  140. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/onclick_menu.html +0 -0
  141. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/report.html +0 -0
  142. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/datatables/select_pivot.html +0 -0
  143. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/kanban/description_modal.html +0 -0
  144. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/kanban/middle.html +0 -0
  145. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/kanban/modal.html +0 -0
  146. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/kanban/report.html +0 -0
  147. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/query_builder.html +0 -0
  148. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/query_modal.html +0 -0
  149. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/select_column.html +0 -0
  150. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/single_values/middle.html +0 -0
  151. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/single_values/modal.html +0 -0
  152. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/templates/advanced_report_builder/single_values/report.html +0 -0
  153. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/toggle.py +0 -0
  154. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/urls.py +0 -0
  155. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/utils.py +0 -0
  156. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/.DS_Store +0 -0
  157. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/__init__.py +0 -0
  158. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/bar_charts.py +0 -0
  159. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/charts_base.py +0 -0
  160. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/custom.py +0 -0
  161. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/dashboard.py +0 -0
  162. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/datatables/__init__.py +0 -0
  163. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/datatables/datatables.py +0 -0
  164. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/datatables/utils.py +0 -0
  165. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/funnel_charts.py +0 -0
  166. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/helpers.py +0 -0
  167. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/line_charts.py +0 -0
  168. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/pie_charts.py +0 -0
  169. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/query_modal/__init__.py +0 -0
  170. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/query_modal/mixin.py +0 -0
  171. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/report.py +0 -0
  172. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/report_utils_mixin.py +0 -0
  173. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/reports.py +0 -0
  174. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/targets/__init__.py +0 -0
  175. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/targets/utils.py +0 -0
  176. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/advanced_report_builder/views/targets/views.py +0 -0
  177. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/django_advanced_report_builder.egg-info/dependency_links.txt +0 -0
  178. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/django_advanced_report_builder.egg-info/requires.txt +0 -0
  179. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/django_advanced_report_builder.egg-info/top_level.txt +0 -0
  180. {django-advanced-report-builder-0.9.1 → django-advanced-report-builder-0.9.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-advanced-report-builder
3
- Version: 0.9.1
3
+ Version: 0.9.3
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
@@ -0,0 +1,26 @@
1
+ # Generated by Django 5.0.7 on 2025-05-07 11:13
2
+
3
+ import django.db.models.deletion
4
+ from django.conf import settings
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('advanced_report_builder', '0014_auto_20240706_2207'),
12
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AddField(
17
+ model_name='report',
18
+ name='user_created',
19
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='report_user_created_set', to=settings.AUTH_USER_MODEL),
20
+ ),
21
+ migrations.AddField(
22
+ model_name='report',
23
+ name='user_updated',
24
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='report_user_updated_set', to=settings.AUTH_USER_MODEL),
25
+ ),
26
+ ]
@@ -3,8 +3,10 @@ from django.db import models
3
3
  from django.utils.dates import MONTHS
4
4
  from django_datatables.columns import DatatableColumn, NoHeadingColumn, ManyToManyColumn
5
5
  from django_datatables.model_def import DatatableModel
6
- from time_stamped_model.models import TimeStampedModel
7
6
  from django_modals.model_fields.colour import ColourField
7
+ from time_stamped_model.models import TimeStampedModel
8
+
9
+ from django.conf import settings
8
10
 
9
11
  from advanced_report_builder.globals import (
10
12
  DISPLAY_OPTION_CHOICES,
@@ -131,6 +133,20 @@ class Report(TimeStampedModel):
131
133
  report_tags = models.ManyToManyField(ReportTag, blank=True)
132
134
  notes = models.TextField(null=True, blank=True)
133
135
  version = models.PositiveSmallIntegerField(default=0)
136
+ user_created = models.ForeignKey(
137
+ settings.AUTH_USER_MODEL,
138
+ on_delete=models.SET_NULL,
139
+ null=True,
140
+ blank=True,
141
+ related_name='report_user_created_set'
142
+ )
143
+ user_updated = models.ForeignKey(
144
+ settings.AUTH_USER_MODEL,
145
+ on_delete=models.SET_NULL,
146
+ null=True,
147
+ blank=True,
148
+ related_name='report_user_updated_set'
149
+ )
134
150
 
135
151
  def __str__(self):
136
152
  return self.name
@@ -145,6 +161,12 @@ class Report(TimeStampedModel):
145
161
  return self.name
146
162
 
147
163
  def save(self, *args, **kwargs):
164
+
165
+ current_user = getattr(self, '_current_user', None)
166
+ if current_user is not None and current_user.is_authenticated:
167
+ self.user_updated = current_user
168
+ if self.user_created is None:
169
+ self.user_created = current_user
148
170
  is_new = self.pk is None
149
171
  if self.version is not None:
150
172
  self.version += 1
@@ -155,7 +177,7 @@ class Report(TimeStampedModel):
155
177
  if self.instance_type is None:
156
178
  self.instance_type = self._meta.label_lower.split('.')[1]
157
179
  result = super().save(*args, **kwargs)
158
- model_report_save.send(sender=self.__class__, instance=self, created=is_new)
180
+ model_report_save.send(sender=self.__class__, instance=self, created=is_new, user=current_user)
159
181
  return result
160
182
 
161
183
  def get_base_model(self):
@@ -221,10 +243,10 @@ class ReportQuery(TimeStampedModel):
221
243
  order = models.PositiveSmallIntegerField()
222
244
 
223
245
  def save(self, *args, **kwargs):
224
- is_new = self.pk is None
225
246
  self.set_order_field(extra_filters={'report': self.report})
226
247
  result = super().save(*args, **kwargs)
227
- model_report_save.send(sender=self.__class__, instance=self, created=is_new)
248
+ self.report._current_user = getattr(self, '_current_user', None) # this is to update the users
249
+ self.report.save()
228
250
  return result
229
251
 
230
252
  class Meta:
@@ -423,10 +445,10 @@ class KanbanReportDescription(TimeStampedModel):
423
445
  order = models.PositiveSmallIntegerField()
424
446
 
425
447
  def save(self, *args, **kwargs):
426
- is_new = self.pk is None
427
448
  self.set_order_field(extra_filters={'kanban_report': self.kanban_report})
428
449
  result = super().save(*args, **kwargs)
429
- model_report_save.send(sender=self.__class__, instance=self, created=is_new)
450
+ self.kanban_report._current_user = getattr(self, '_current_user', None) # this is to update the users
451
+ self.kanban_report.save()
430
452
  return result
431
453
 
432
454
  def get_base_model(self):
@@ -484,10 +506,10 @@ class KanbanReportLane(TimeStampedModel):
484
506
  query_data = models.JSONField(null=True, blank=True)
485
507
 
486
508
  def save(self, *args, **kwargs):
487
- is_new = self.pk is None
488
509
  self.set_order_field(extra_filters={'kanban_report': self.kanban_report})
489
510
  result = super().save(*args, **kwargs)
490
- model_report_save.send(sender=self.__class__, instance=self, created=is_new)
511
+ self.kanban_report._current_user = getattr(self, '_current_user', None) # this is to update the users
512
+ self.kanban_report.save()
491
513
  return result
492
514
 
493
515
  def get_base_model(self):
@@ -46,6 +46,13 @@ class VariableDate:
46
46
  RANGE_TYPE_NEXT_24_MONTHS = 41
47
47
  RANGE_TYPE_LAST_36_MONTHS = 42
48
48
  RANGE_TYPE_NEXT_36_MONTHS = 43
49
+
50
+ RANGE_TYPE_2_WEEKS_AGO = 44
51
+ RANGE_TYPE_3_WEEKS_AGO = 45
52
+ RANGE_TYPE_4_WEEKS_AGO = 46
53
+ RANGE_TYPE_5_WEEKS_AGO = 47
54
+ RANGE_TYPE_6_WEEKS_AGO = 48
55
+
49
56
  RANGE_TYPE_CHOICES = (
50
57
  (RANGE_TYPE_LAST_36_MONTHS, 'Last 36 months'),
51
58
  (RANGE_TYPE_LAST_24_MONTHS, 'Last 24 months'),
@@ -60,6 +67,12 @@ class VariableDate:
60
67
  (RANGE_TYPE_LAST_28_DAYS, 'Last 28 days'),
61
68
  (RANGE_TYPE_LAST_14_DAYS, 'Last 14 days'),
62
69
  (RANGE_TYPE_LAST_7_DAYS, 'Last 7 days'),
70
+ (RANGE_TYPE_6_WEEKS_AGO, '6 weeks ago'),
71
+ (RANGE_TYPE_5_WEEKS_AGO, '5 weeks ago'),
72
+ (RANGE_TYPE_4_WEEKS_AGO, '4 weeks ago'),
73
+ (RANGE_TYPE_3_WEEKS_AGO, '3 weeks ago'),
74
+ (RANGE_TYPE_2_WEEKS_AGO, '2 weeks ago'),
75
+
63
76
  (RANGE_TYPE_LAST_WEEK, 'Last week'),
64
77
  (RANGE_TYPE_YESTERDAY, 'Yesterday'),
65
78
  (RANGE_TYPE_TODAY, 'Today'),
@@ -90,6 +103,7 @@ class VariableDate:
90
103
 
91
104
  def get_variable_dates(self, range_type):
92
105
  today = date.today()
106
+ start_of_this_week = today - timedelta(days=today.weekday())
93
107
  if range_type == self.RANGE_TYPE_TODAY:
94
108
  start_date = today
95
109
  end_date = today + timedelta(days=1)
@@ -103,35 +117,55 @@ class VariableDate:
103
117
  end_date = start_date + timedelta(days=1)
104
118
  number_of_days = 1
105
119
  elif range_type == self.RANGE_TYPE_THIS_WEEK: # This Week
106
- start_date = today - timedelta(days=today.weekday())
120
+ start_date = start_of_this_week
107
121
  end_date = start_date + timedelta(days=7)
108
122
  number_of_days = 7
109
123
  elif range_type == self.RANGE_TYPE_NEXT_WEEK: # Next Week
110
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=7)
124
+ start_date = start_of_this_week + timedelta(days=7)
111
125
  end_date = start_date + timedelta(days=7)
112
126
  number_of_days = 7
113
127
  elif range_type == self.RANGE_TYPE_LAST_WEEK: # Last Week
114
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=14)
128
+ start_date = start_of_this_week - timedelta(days=7)
129
+ end_date = start_date + timedelta(days=7)
130
+ number_of_days = 7
131
+ elif range_type == self.RANGE_TYPE_2_WEEKS_TIME: # 2 Weeks Time
132
+ start_date = start_of_this_week + timedelta(days=14)
133
+ end_date = start_date + timedelta(days=7)
134
+ number_of_days = 7
135
+ elif range_type == self.RANGE_TYPE_2_WEEKS_AGO: # 2 Weeks Ago
136
+ start_date = start_of_this_week - timedelta(days=14)
137
+ end_date = start_date + timedelta(days=7)
138
+ number_of_days = 7
139
+ elif range_type == self.RANGE_TYPE_3_WEEKS_TIME: # 3 Weeks Time
140
+ start_date = start_of_this_week + timedelta(days=21)
141
+ end_date = start_date + timedelta(days=7)
142
+ number_of_days = 7
143
+ elif range_type == self.RANGE_TYPE_3_WEEKS_AGO: # 3 Weeks Ago
144
+ start_date = start_of_this_week - timedelta(days=21)
145
+ end_date = start_date + timedelta(days=7)
146
+ number_of_days = 7
147
+ elif range_type == self.RANGE_TYPE_4_WEEKS_TIME: # 4 Weeks Time
148
+ start_date = start_of_this_week + timedelta(days=28)
115
149
  end_date = start_date + timedelta(days=7)
116
150
  number_of_days = 7
117
- elif range_type == self.RANGE_TYPE_2_WEEKS_TIME: # 2 Week Time
118
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=14)
151
+ elif range_type == self.RANGE_TYPE_4_WEEKS_AGO: # 4 Weeks Ago
152
+ start_date = start_of_this_week - timedelta(days=28)
119
153
  end_date = start_date + timedelta(days=7)
120
154
  number_of_days = 7
121
- elif range_type == self.RANGE_TYPE_3_WEEKS_TIME: # 3 Week Time
122
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=21)
155
+ elif range_type == self.RANGE_TYPE_5_WEEKS_TIME: # 5 Weeks Time
156
+ start_date = start_of_this_week + timedelta(days=35)
123
157
  end_date = start_date + timedelta(days=7)
124
158
  number_of_days = 7
125
- elif range_type == self.RANGE_TYPE_4_WEEKS_TIME: # 4 Week Time
126
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=28)
159
+ elif range_type == self.RANGE_TYPE_5_WEEKS_AGO: # 5 Weeks Ago
160
+ start_date = start_of_this_week - timedelta(days=35)
127
161
  end_date = start_date + timedelta(days=7)
128
162
  number_of_days = 7
129
- elif range_type == self.RANGE_TYPE_5_WEEKS_TIME: # 5 Week Time
130
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=35)
163
+ elif range_type == self.RANGE_TYPE_6_WEEKS_TIME: # 6 Weeks Time
164
+ start_date = start_of_this_week + timedelta(days=42)
131
165
  end_date = start_date + timedelta(days=7)
132
166
  number_of_days = 7
133
- elif range_type == self.RANGE_TYPE_6_WEEKS_TIME: # 6 Week Time
134
- start_date = today - timedelta(days=today.weekday()) + timedelta(days=42)
167
+ elif range_type == self.RANGE_TYPE_6_WEEKS_AGO: # 6 Weeks Ago
168
+ start_date = start_of_this_week - timedelta(days=42)
135
169
  end_date = start_date + timedelta(days=7)
136
170
  number_of_days = 7
137
171
  elif range_type == self.RANGE_TYPE_THIS_MONTH: # This Month
@@ -160,11 +194,7 @@ class VariableDate:
160
194
  start_date = today
161
195
  end_date = start_date + timedelta(days=14)
162
196
  number_of_days = 14
163
- elif range_type == self.RANGE_TYPE_LAST_14_DAYS: # Next 14 Days
164
- start_date = today - timedelta(days=14)
165
- end_date = today
166
- number_of_days = 14
167
- elif range_type == 13: # Last 14 Days
197
+ elif range_type == self.RANGE_TYPE_LAST_14_DAYS: # Last 14 Days
168
198
  start_date = today - timedelta(days=14)
169
199
  end_date = today
170
200
  number_of_days = 14
@@ -181,9 +181,9 @@ class TableModal(MultiQueryModalMixin, QueryBuilderModalBase):
181
181
 
182
182
  def form_valid(self, form):
183
183
  org_id = self.object.pk if hasattr(self, 'object') else None
184
- save_function = getattr(form, 'save', None)
185
- if save_function:
186
- save_function()
184
+ instance = form.save(commit=False)
185
+ instance._current_user = self.request.user
186
+ instance.save()
187
187
  self.post_save(created=org_id is None, form=form)
188
188
  if not self.response_commands:
189
189
  self.add_command('reload')
@@ -261,10 +261,6 @@ class TableFieldForm(ChartBaseFieldForm):
261
261
  if int(data_attr.get('display_heading', 1)) == 1:
262
262
  self.fields['display_heading'].initial = True
263
263
 
264
- print('-------==========-')
265
- print(self.django_field)
266
- print(self.col_type_override)
267
-
268
264
  has_existing_annotations = self.col_type_override is not None and self.col_type_override.annotations is not None
269
265
 
270
266
  if self.django_field is not None and isinstance(self.django_field, DATE_FIELDS):
@@ -514,7 +514,12 @@ class KanbanModal(ModelFormModal):
514
514
  o.save()
515
515
  return self.command_response('')
516
516
 
517
- def post_save(self, created, form):
517
+ def form_valid(self, form):
518
+ org_id = self.object.pk if hasattr(self, 'object') else None
519
+ created=org_id is None
520
+ instance = form.save(commit=False)
521
+ instance._current_user = self.request.user
522
+ instance.save()
518
523
  if created:
519
524
  self.modal_redirect(
520
525
  self.request.resolver_match.view_name,
@@ -524,7 +529,10 @@ class KanbanModal(ModelFormModal):
524
529
  url_name = getattr(settings, 'REPORT_BUILDER_DETAIL_URL_NAME', '')
525
530
  if url_name and self.slug.get('new'):
526
531
  url = reverse(url_name, kwargs={'slug': self.object.slug})
527
- self.command_response('redirect', url=url)
532
+ self.add_command('redirect', url=url)
533
+ if not self.response_commands:
534
+ self.add_command('reload')
535
+ return self.command_response()
528
536
 
529
537
 
530
538
  class KanbanLaneModal(QueryBuilderModalBase):
@@ -762,7 +770,9 @@ class KanbanLaneModal(QueryBuilderModalBase):
762
770
  return JsonResponse({'results': descriptions})
763
771
 
764
772
  def form_valid(self, form):
765
- form.save()
773
+ instance = form.save(commit=False)
774
+ instance._current_user = self.request.user
775
+ instance.save()
766
776
  return self.command_response('reload')
767
777
 
768
778
 
@@ -781,6 +791,7 @@ class KanbanLaneDuplicateModal(Modal):
781
791
  kanban_report_lane.pk = None
782
792
  kanban_report_lane.name = f'Copy of {kanban_report_lane.name}'
783
793
  kanban_report_lane.order = None
794
+ kanban_report_lane._current_user = self.request.user
784
795
  kanban_report_lane.save()
785
796
  return self.command_response('reload')
786
797
 
@@ -818,7 +829,9 @@ class KanbanDescriptionModal(DataMergeUtils, QueryBuilderModalBase):
818
829
  return self.command_response(f'build_data_merge_menu_{field_auto_id}', data=json.dumps(menus))
819
830
 
820
831
  def form_valid(self, form):
821
- form.save()
832
+ instance = form.save(commit=False)
833
+ instance._current_user = self.request.user
834
+ instance.save()
822
835
  return self.command_response('reload')
823
836
 
824
837
 
@@ -836,5 +849,6 @@ class KanbanDescriptionDuplicateModal(Modal):
836
849
  kanban_report_description = get_object_or_404(KanbanReportDescription, id=self.slug['pk'])
837
850
  kanban_report_description.pk = None
838
851
  kanban_report_description.name = f'Copy of {kanban_report_description.name}'
852
+ kanban_report_description._current_user = self.request.user
839
853
  kanban_report_description.save()
840
854
  return self.command_response('reload')
@@ -195,6 +195,7 @@ class QueryBuilderModalBaseMixin(ReportBuilderFieldUtils):
195
195
  form.fields[field_name].widget.select_data = _fields
196
196
 
197
197
 
198
+
198
199
  class QueryBuilderModalBase(QueryBuilderModalBaseMixin, ModelFormModal):
199
200
  size = 'xl'
200
201
 
@@ -227,7 +228,10 @@ class QueryBuilderModalBase(QueryBuilderModalBaseMixin, ModelFormModal):
227
228
 
228
229
  def form_valid(self, form):
229
230
  org_id = self.object.id if hasattr(self, 'object') else None
230
- chart_report = form.save()
231
+ chart_report = form.save(commit=False)
232
+ chart_report._current_user = self.request.user
233
+ chart_report.save()
234
+
231
235
  self.post_save(created=org_id is None, form=form)
232
236
  if not self.response_commands:
233
237
  url_name = getattr(settings, 'REPORT_BUILDER_DETAIL_URL_NAME', '')
@@ -196,6 +196,16 @@ class QueryModal(QueryBuilderModalBaseMixin, ModelFormModal):
196
196
  o.save()
197
197
  return self.command_response('')
198
198
 
199
+ def form_valid(self, form):
200
+ org_id = self.object.pk if hasattr(self, 'object') else None
201
+ instance = form.save(commit=False)
202
+ instance._current_user = self.request.user
203
+ instance.save()
204
+ self.post_save(created=org_id is None, form=form)
205
+ if not self.response_commands:
206
+ self.add_command('reload')
207
+ return self.command_response()
208
+
199
209
 
200
210
  class OrderByFieldForm(ModelCrispyForm):
201
211
  class Meta:
@@ -366,22 +366,6 @@ class SingleValueModal(MultiQueryModalMixin, QueryBuilderModalBase):
366
366
  'values': {SingleValueReport.SINGLE_VALUE_TYPE_PERCENT: 'show'},
367
367
  'default': 'hide',
368
368
  },
369
- {
370
- 'selector': '.btn-query-edit',
371
- 'values': {
372
- SingleValueReport.SINGLE_VALUE_TYPE_PERCENT: 'hide',
373
- SingleValueReport.SINGLE_VALUE_TYPE_PERCENT_FROM_COUNT: 'hide',
374
- },
375
- 'default': 'show',
376
- },
377
- {
378
- 'selector': '.btn-query-numerator-edit',
379
- 'values': {
380
- SingleValueReport.SINGLE_VALUE_TYPE_PERCENT: 'show',
381
- SingleValueReport.SINGLE_VALUE_TYPE_PERCENT_FROM_COUNT: 'show',
382
- },
383
- 'default': 'hide',
384
- },
385
369
  {
386
370
  'selector': 'label[for=id_field]',
387
371
  'values': {
@@ -542,29 +526,43 @@ class SingleValueModal(MultiQueryModalMixin, QueryBuilderModalBase):
542
526
  )
543
527
  return self.command_response('report_fields', data=json.dumps({'fields': fields, 'tables': tables}))
544
528
 
545
- def query_menu(self):
546
- edit_numerator_query_js = get_query_js('edit_numerator_query', 'query_id')
547
- description_edit_menu_items = super().query_menu()
548
- description_edit_menu_items.append(
549
- MenuItem(
550
- edit_numerator_query_js.replace('"', '"'),
551
- menu_display='Edit',
552
- css_classes='btn btn-sm btn-outline-dark btn-query-numerator-edit',
553
- font_awesome='fas fa-pencil',
554
- link_type=MenuItem.HREF,
555
- hide=True,
529
+ def button_add_query(self, **_kwargs):
530
+ single_value_type = _kwargs['single_value_type']
531
+ if (single_value_type == '' or
532
+ int(single_value_type) not in [SingleValueReport.SINGLE_VALUE_TYPE_COUNT,
533
+ SingleValueReport.SINGLE_VALUE_TYPE_PERCENT_FROM_COUNT, ]):
534
+ return super().button_add_query(**_kwargs)
535
+ else:
536
+ report_type = self.get_report_type(**_kwargs)
537
+ show_order_by = 1 if self.show_order_by else 0
538
+ url = reverse(
539
+ 'advanced_report_builder:single_value_numerator_modal',
540
+ kwargs={'slug': f'report_id-{self.object.id}-report_type-{report_type}-show_order_by-{show_order_by}'},
556
541
  )
557
- )
558
- return description_edit_menu_items
542
+ return self.command_response('show_modal', modal=url)
543
+
544
+
545
+ def button_edit_query(self, **_kwargs):
546
+ single_value_type = _kwargs['single_value_type']
547
+ if (single_value_type == '' or
548
+ int(single_value_type) not in [SingleValueReport.SINGLE_VALUE_TYPE_COUNT,
549
+ SingleValueReport.SINGLE_VALUE_TYPE_PERCENT_FROM_COUNT,]):
550
+ return super().button_edit_query(**_kwargs)
551
+ else:
552
+ query_id = _kwargs['query_id'][1:]
553
+ report_type = self.get_report_type(**_kwargs)
554
+ url = reverse(
555
+ 'advanced_report_builder:single_value_numerator_modal',
556
+ kwargs={'slug': f'pk-{query_id}-report_type-{report_type}'},
557
+ )
558
+ return self.command_response('show_modal', modal=url)
559
559
 
560
- def button_edit_numerator_query(self, **_kwargs):
561
- query_id = _kwargs['query_id'][1:]
562
- report_type = self.get_report_type(**_kwargs)
563
- url = reverse(
564
- 'advanced_report_builder:single_value_numerator_modal',
565
- kwargs={'slug': f'pk-{query_id}-report_type-{report_type}'},
566
- )
567
- return self.command_response('show_modal', modal=url)
560
+
561
+ def form_valid(self, form):
562
+ instance = form.save(commit=False)
563
+ instance._current_user = self.request.user
564
+ instance.save()
565
+ return self.command_response('reload')
568
566
 
569
567
 
570
568
  class SingleValueShowBreakdownModal(TableUtilsMixin, Modal):
@@ -668,3 +666,14 @@ class QueryNumeratorModal(QueryBuilderModalBaseMixin, ModelFormModal):
668
666
 
669
667
  def get_report_type(self):
670
668
  return self.slug['report_type']
669
+
670
+ def form_valid(self, form):
671
+ org_id = self.object.pk if hasattr(self, 'object') else None
672
+ instance = form.save(commit=False)
673
+ instance._current_user = self.request.user
674
+ instance.save()
675
+ self.post_save(created=org_id is None, form=form)
676
+ if not self.response_commands:
677
+ self.add_command('reload')
678
+ return self.command_response()
679
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-advanced-report-builder
3
- Version: 0.9.1
3
+ Version: 0.9.3
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
@@ -41,6 +41,7 @@ advanced_report_builder/migrations/0011_auto_20230620_1449.py
41
41
  advanced_report_builder/migrations/0012_auto_20230718_1642.py
42
42
  advanced_report_builder/migrations/0013_reportqueryorder.py
43
43
  advanced_report_builder/migrations/0014_auto_20240706_2207.py
44
+ advanced_report_builder/migrations/0015_report_user_created_report_user_updated.py
44
45
  advanced_report_builder/migrations/__init__.py
45
46
  advanced_report_builder/static/.DS_Store
46
47
  advanced_report_builder/static/advanced_report_builder/.DS_Store
@@ -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.9.1",
8
+ version="0.9.3",
9
9
  author="Thomas Turner",
10
10
  description="Django app that allows you to build reports from modals",
11
11
  long_description=long_description,