wbcrm 1.44.1__tar.gz → 1.44.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 wbcrm might be problematic. Click here for more details.

Files changed (175) hide show
  1. {wbcrm-1.44.1 → wbcrm-1.44.3}/PKG-INFO +1 -1
  2. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/accounts.py +4 -1
  3. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/accounts.py +15 -5
  4. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/accounts.py +3 -0
  5. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/accounts/test_models.py +12 -0
  6. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/accounts.py +2 -2
  7. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/display/accounts.py +1 -1
  8. {wbcrm-1.44.1 → wbcrm-1.44.3}/.gitignore +0 -0
  9. {wbcrm-1.44.1 → wbcrm-1.44.3}/pyproject.toml +0 -0
  10. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/__init__.py +0 -0
  11. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/__init__.py +0 -0
  12. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/accounts.py +0 -0
  13. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/activities.py +0 -0
  14. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/events.py +0 -0
  15. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/groups.py +0 -0
  16. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/admin/products.py +0 -0
  17. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/apps.py +0 -0
  18. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/configurations/__init__.py +0 -0
  19. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/configurations/base.py +0 -0
  20. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/dynamic_preferences_registry.py +0 -0
  21. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/factories/__init__.py +0 -0
  22. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/factories/accounts.py +0 -0
  23. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/factories/activities.py +0 -0
  24. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/factories/groups.py +0 -0
  25. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/factories/products.py +0 -0
  26. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/__init__.py +0 -0
  27. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/activities.py +0 -0
  28. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/groups.py +0 -0
  29. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/products.py +0 -0
  30. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/filters/signals.py +0 -0
  31. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/fixtures/wbcrm.json +0 -0
  32. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/kpi_handlers/activities.py +0 -0
  33. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/locale/de/LC_MESSAGES/django.po +0 -0
  34. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0001_initial_squashed_squashed_0032_productcompanyrelationship_alter_product_prospects_and_more.py +0 -0
  35. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0002_alter_activity_repeat_choice.py +0 -0
  36. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0003_remove_activity_external_id_and_more.py +0 -0
  37. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0004_alter_activity_status.py +0 -0
  38. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0005_account_accountrole_accountroletype_and_more.py +0 -0
  39. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0006_alter_activity_location.py +0 -0
  40. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0007_alter_account_status.py +0 -0
  41. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0008_alter_activity_options.py +0 -0
  42. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0009_alter_account_is_public.py +0 -0
  43. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0010_alter_account_reference_id.py +0 -0
  44. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0011_activity_summary.py +0 -0
  45. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0012_alter_activity_summary.py +0 -0
  46. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0013_account_action_plan_account_relationship_status_and_more.py +0 -0
  47. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0014_alter_account_relationship_status.py +0 -0
  48. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0015_alter_activity_type.py +0 -0
  49. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0016_auto_20241205_1015.py +0 -0
  50. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/0017_event.py +0 -0
  51. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/migrations/__init__.py +0 -0
  52. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/__init__.py +0 -0
  53. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/activities.py +0 -0
  54. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/events.py +0 -0
  55. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/groups.py +0 -0
  56. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/llm/activity_summaries.py +0 -0
  57. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/llm/analyze_relationship.py +0 -0
  58. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/products.py +0 -0
  59. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/models/recurrence.py +0 -0
  60. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/preferences.py +0 -0
  61. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/report/activity_report.py +0 -0
  62. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/__init__.py +0 -0
  63. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/activities.py +0 -0
  64. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/groups.py +0 -0
  65. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/products.py +0 -0
  66. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/recurrence.py +0 -0
  67. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/serializers/signals.py +0 -0
  68. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/static/wbcrm/markdown/documentation/activity.md +0 -0
  69. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/static/wbcrm/markdown/documentation/activitytype.md +0 -0
  70. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/static/wbcrm/markdown/documentation/group.md +0 -0
  71. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/static/wbcrm/markdown/documentation/product.md +0 -0
  72. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/__init__.py +0 -0
  73. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/__init__.py +0 -0
  74. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/admin.py +0 -0
  75. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backend.py +0 -0
  76. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/__init__.py +0 -0
  77. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/__init__.py +0 -0
  78. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/google_calendar_backend.py +0 -0
  79. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/request_utils/__init__.py +0 -0
  80. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/request_utils/external_to_internal/create.py +0 -0
  81. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/request_utils/external_to_internal/delete.py +0 -0
  82. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/request_utils/external_to_internal/update.py +0 -0
  83. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/request_utils/internal_to_external/update.py +0 -0
  84. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tasks.py +0 -0
  85. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tests/__init__.py +0 -0
  86. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tests/conftest.py +0 -0
  87. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tests/test_data.py +0 -0
  88. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tests/test_google_backend.py +0 -0
  89. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/tests/test_utils.py +0 -0
  90. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/typing_informations.py +0 -0
  91. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/google/utils.py +0 -0
  92. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/__init__.py +0 -0
  93. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/backend.py +0 -0
  94. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/msgraph.py +0 -0
  95. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/parser.py +0 -0
  96. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/__init__.py +0 -0
  97. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/conftest.py +0 -0
  98. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/fixtures.py +0 -0
  99. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/test_admin.py +0 -0
  100. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/test_backend.py +0 -0
  101. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/test_controller.py +0 -0
  102. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/backends/outlook/tests/test_parser.py +0 -0
  103. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/controller.py +0 -0
  104. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/dynamic_preferences_registry.py +0 -0
  105. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/preferences.py +0 -0
  106. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/shortcuts.py +0 -0
  107. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/tasks.py +0 -0
  108. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/urls.py +0 -0
  109. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/utils.py +0 -0
  110. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/activity/views.py +0 -0
  111. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/admin.py +0 -0
  112. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/apps.py +0 -0
  113. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/dynamic_preferences_registry.py +0 -0
  114. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/management.py +0 -0
  115. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/tasks.py +0 -0
  116. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/synchronization/urls.py +0 -0
  117. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tasks.py +0 -0
  118. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/templates/email/activity.html +0 -0
  119. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/templates/email/activity_report.html +0 -0
  120. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/templates/email/daily_summary.html +0 -0
  121. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/templates/email/global_daily_summary.html +0 -0
  122. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/__init__.py +0 -0
  123. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/accounts/__init__.py +0 -0
  124. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/accounts/test_viewsets.py +0 -0
  125. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/conftest.py +0 -0
  126. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/disable_signals.py +0 -0
  127. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/e2e/__init__.py +0 -0
  128. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/e2e/e2e_wbcrm_utility.py +0 -0
  129. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/e2e/test_e2e.py +0 -0
  130. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_assignee_methods.py +0 -0
  131. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_chartviewsets.py +0 -0
  132. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_dto.py +0 -0
  133. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_filters.py +0 -0
  134. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_models.py +0 -0
  135. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_recurrence.py +0 -0
  136. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_report.py +0 -0
  137. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_serializers.py +0 -0
  138. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_tasks.py +0 -0
  139. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/test_viewsets.py +0 -0
  140. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/tests/tests.py +0 -0
  141. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/typings.py +0 -0
  142. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/urls.py +0 -0
  143. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/__init__.py +0 -0
  144. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/activities.py +0 -0
  145. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/buttons/__init__.py +0 -0
  146. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/buttons/accounts.py +0 -0
  147. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/buttons/activities.py +0 -0
  148. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/buttons/signals.py +0 -0
  149. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/display/__init__.py +0 -0
  150. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/display/activities.py +0 -0
  151. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/display/groups.py +0 -0
  152. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/display/products.py +0 -0
  153. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/endpoints/__init__.py +0 -0
  154. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/endpoints/accounts.py +0 -0
  155. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/endpoints/activities.py +0 -0
  156. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/endpoints/groups.py +0 -0
  157. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/endpoints/products.py +0 -0
  158. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/groups.py +0 -0
  159. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/menu/__init__.py +0 -0
  160. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/menu/accounts.py +0 -0
  161. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/menu/activities.py +0 -0
  162. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/menu/groups.py +0 -0
  163. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/menu/products.py +0 -0
  164. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/mixins.py +0 -0
  165. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/previews/__init__.py +0 -0
  166. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/previews/activities.py +0 -0
  167. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/products.py +0 -0
  168. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/recurrence.py +0 -0
  169. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/titles/__init__.py +0 -0
  170. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/titles/accounts.py +0 -0
  171. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/titles/activities.py +0 -0
  172. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/titles/products.py +0 -0
  173. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/viewsets/titles/utils.py +0 -0
  174. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/workflows/__init__.py +0 -0
  175. {wbcrm-1.44.1 → wbcrm-1.44.3}/wbcrm/workflows/assignee_methods.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbcrm
3
- Version: 1.44.1
3
+ Version: 1.44.3
4
4
  Summary: A workbench module that contains all the functionality related to a customer relationship management.
5
5
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
6
6
  Requires-Dist: django-eventtools==1.*
@@ -32,6 +32,10 @@ class AccountFilter(wb_filters.FilterSet):
32
32
  method="filter_not_owner",
33
33
  )
34
34
 
35
+ status = wb_filters.MultipleChoiceFilter(
36
+ choices=Account.Status.choices, label="Status", default=[Account.Status.OPEN.value]
37
+ )
38
+
35
39
  def filter_not_owner(self, queryset, name, value):
36
40
  if value:
37
41
  return queryset.exclude(owner__in=value)
@@ -46,7 +50,6 @@ class AccountFilter(wb_filters.FilterSet):
46
50
  model = Account
47
51
  fields = {
48
52
  "reference_id": ["icontains"],
49
- "status": ["exact"],
50
53
  "is_active": ["exact"],
51
54
  "parent": ["exact", "isnull"],
52
55
  "is_terminal_account": ["exact"],
@@ -25,7 +25,6 @@ from wbcore.metadata.configs.buttons import ActionButton
25
25
  from wbcore.models import WBModel
26
26
  from wbcore.signals import pre_merge
27
27
  from wbcore.utils.models import (
28
- ActiveObjectManager,
29
28
  ComplexToStringMixin,
30
29
  DeleteToDisableMixin,
31
30
  )
@@ -67,14 +66,19 @@ class AccountDefaultQueryset(QuerySet):
67
66
  ).filter((Q(is_public=True) & Q(has_descending_roles=True)) | Q(has_direct_role=True))
68
67
 
69
68
 
70
- class AccountManager(ActiveObjectManager):
69
+ class AccountManager(models.Manager):
71
70
  def get_queryset(self) -> AccountDefaultQueryset:
72
- return AccountDefaultQueryset(self.model).filter(is_active=True)
71
+ return AccountDefaultQueryset(self.model)
73
72
 
74
73
  def filter_for_user(self, user: User, validity_date: date | None = None, strict: bool = False) -> QuerySet:
75
74
  return self.get_queryset().filter_for_user(user, validity_date=validity_date, strict=strict)
76
75
 
77
76
 
77
+ class ActiveAccountManager(AccountManager):
78
+ def get_queryset(self):
79
+ return super().get_queryset().filter(is_active=True)
80
+
81
+
78
82
  class OpenAccountObjectManager(AccountManager):
79
83
  def get_queryset(self):
80
84
  return super().get_queryset().filter(status=Account.Status.OPEN, is_active=True)
@@ -261,6 +265,10 @@ class Account(ComplexToStringMixin, DeleteToDisableMixin, WBModel, MPTTModel):
261
265
  # else:
262
266
  # self.is_terminal_account = False
263
267
  self.is_terminal_account = self.is_leaf_node()
268
+ if not self.is_active:
269
+ self.status = self.Status.CLOSE
270
+ if self.status == self.Status.CLOSE:
271
+ self.is_active = False
264
272
  super().save(*args, **kwargs)
265
273
  # self.children.update() TODO recompute str for all children
266
274
  # Account.objects.filter(id=self.id).update(computed_str=self.compute_str())
@@ -333,7 +341,8 @@ class Account(ComplexToStringMixin, DeleteToDisableMixin, WBModel, MPTTModel):
333
341
  verbose_name_plural = _("Accounts")
334
342
  permissions = [("administrate_account", "Administrate Account")]
335
343
 
336
- objects = AccountManager()
344
+ objects = ActiveAccountManager()
345
+ all_objects = AccountManager()
337
346
  open_objects = OpenAccountObjectManager()
338
347
  tree_objects = TreeManager()
339
348
 
@@ -585,7 +594,8 @@ def handle_user_deactivation(sender, instance, substitute_profile=None, **kwargs
585
594
  for validity in profile_role.validity_set.all():
586
595
  if validity.timespan.upper >= deactivation_date: # type: ignore
587
596
  validity.timespan = DateRange(
588
- validity.timespan.lower, max([deactivation_date, validity.timespan.lower]) # type: ignore
597
+ validity.timespan.lower,
598
+ max([deactivation_date, validity.timespan.lower]), # type: ignore
589
599
  )
590
600
  validity.save()
591
601
  if substitute_profile and validity.timespan.lower <= deactivation_date: # type: ignore
@@ -16,6 +16,9 @@ class AccountRoleTypeRepresentationSerializer(wb_serializers.RepresentationSeria
16
16
  class AccountRepresentationSerializer(wb_serializers.RepresentationSerializer):
17
17
  _detail = wb_serializers.HyperlinkField(reverse_name="wbcrm:account-detail")
18
18
 
19
+ def get_filter_params(self, request):
20
+ return {"is_active": True}
21
+
19
22
  class Meta:
20
23
  model = Account
21
24
  fields = ("id", "computed_str", "_detail")
@@ -17,6 +17,18 @@ class TestAccountModel:
17
17
  def test_init(self, account):
18
18
  assert account.id is not None
19
19
 
20
+ def test_close_account_set_inactive(self, account):
21
+ assert account.is_active
22
+ account.status = Account.Status.CLOSE
23
+ account.save()
24
+ assert not account.is_active
25
+
26
+ def test_disable_account_set_status_close(self, account):
27
+ assert account.status == Account.Status.OPEN
28
+ account.delete()
29
+ assert not account.is_active
30
+ assert account.status == Account.Status.CLOSE
31
+
20
32
  def test_account_with_owner_create_account_role(self, account_factory, entry_factory):
21
33
  customer = entry_factory.create()
22
34
  account = account_factory.create(owner=customer)
@@ -44,14 +44,14 @@ class AccountRepresentationViewSet(AccountPermissionMixin, viewsets.Representati
44
44
  filterset_class = AccountFilter
45
45
 
46
46
  serializer_class = AccountRepresentationSerializer
47
- queryset = Account.objects.all()
47
+ queryset = Account.all_objects.all()
48
48
  ordering = ["title"]
49
49
 
50
50
 
51
51
  class AccountModelViewSet(MergeMixin, AccountPermissionMixin, viewsets.ModelViewSet):
52
52
  serializer_class = AccountModelSerializer
53
53
  filterset_class = AccountFilter
54
- queryset = Account.objects.select_related("owner", "parent").annotate(
54
+ queryset = Account.all_objects.select_related("owner", "parent").annotate(
55
55
  has_children=Exists(Account.objects.filter(parent=OuterRef("pk"))),
56
56
  _group_key=Case(When(has_children=True, then=F("id")), default=None, output_field=IntegerField()),
57
57
  )
@@ -15,6 +15,7 @@ class AccountDisplayConfig(DisplayViewConfig):
15
15
  def get_list_display(self) -> Optional[dp.ListDisplay]:
16
16
  return dp.ListDisplay(
17
17
  fields=[
18
+ dp.Field(key="status", label="Status"),
18
19
  dp.Field(
19
20
  key="owner",
20
21
  label="Owner",
@@ -22,7 +23,6 @@ class AccountDisplayConfig(DisplayViewConfig):
22
23
  dp.Field(key="reference_id", label="Reference ID"),
23
24
  dp.Field(key="is_terminal_account", label="Terminal Account"),
24
25
  dp.Field(key="is_public", label="Public"),
25
- dp.Field(key="is_active", label="Active"),
26
26
  dp.Field(
27
27
  key="llm",
28
28
  label="LLM Analysis",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes