wbhuman_resources 1.59.14__tar.gz → 1.59.16__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.
Files changed (113) hide show
  1. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/PKG-INFO +1 -1
  2. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/absence.py +11 -0
  3. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/__init__.py +1 -0
  4. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/absence.py +5 -0
  5. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/absence.py +13 -1
  6. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/absence.py +3 -1
  7. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/.gitignore +0 -0
  8. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/pyproject.toml +0 -0
  9. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/__init__.py +0 -0
  10. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/__init__.py +0 -0
  11. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/absence.py +0 -0
  12. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/calendars.py +0 -0
  13. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/employee.py +0 -0
  14. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/kpi.py +0 -0
  15. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/admin/review.py +0 -0
  16. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/apps.py +0 -0
  17. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/dynamic_preferences_registry.py +0 -0
  18. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/factories/__init__.py +0 -0
  19. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/factories/absence.py +0 -0
  20. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/factories/calendars.py +0 -0
  21. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/factories/employee.py +0 -0
  22. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/factories/kpi.py +0 -0
  23. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/__init__.py +0 -0
  24. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/absence.py +0 -0
  25. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/absence_graphs.py +0 -0
  26. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/calendars.py +0 -0
  27. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/employee.py +0 -0
  28. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/kpi.py +0 -0
  29. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/review.py +0 -0
  30. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/filters/signals.py +0 -0
  31. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/de/LC_MESSAGES/django.mo +0 -0
  32. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/de/LC_MESSAGES/django.po +0 -0
  33. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/de/LC_MESSAGES/django.po.translated +0 -0
  34. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/en/LC_MESSAGES/django.mo +0 -0
  35. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/en/LC_MESSAGES/django.po +0 -0
  36. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/fr/LC_MESSAGES/django.mo +0 -0
  37. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/locale/fr/LC_MESSAGES/django.po +0 -0
  38. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/management/__init__.py +0 -0
  39. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0001_initial_squashed_squashed_0015_alter_absencerequest_calendaritem_ptr_and_more.py +0 -0
  40. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0016_alter_employeehumanresource_options.py +0 -0
  41. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0017_absencerequest_crossborder_country_and_more.py +0 -0
  42. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0018_remove_position_group_position_groups.py +0 -0
  43. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0019_alter_absencerequest_options_alter_kpi_options_and_more.py +0 -0
  44. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0020_alter_employeeyearbalance_year_alter_review_year.py +0 -0
  45. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0021_alter_position_color.py +0 -0
  46. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0022_remove_review_editable_mode.py +0 -0
  47. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0023_alter_employeehumanresource_weekly_off_periods.py +0 -0
  48. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/0024_alter_absencerequestperiods_unique_together_and_more.py +0 -0
  49. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/migrations/__init__.py +0 -0
  50. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/__init__.py +0 -0
  51. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/calendars.py +0 -0
  52. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/employee.py +0 -0
  53. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/kpi.py +0 -0
  54. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/preferences.py +0 -0
  55. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/models/review.py +0 -0
  56. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/permissions/__init__.py +0 -0
  57. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/permissions/backend.py +0 -0
  58. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/calendars.py +0 -0
  59. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/employee.py +0 -0
  60. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/kpi.py +0 -0
  61. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/serializers/review.py +0 -0
  62. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/signals.py +0 -0
  63. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tasks.py +0 -0
  64. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/templates/review/review_report.html +0 -0
  65. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/__init__.py +0 -0
  66. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/conftest.py +0 -0
  67. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/__init__.py +0 -0
  68. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/test_absences.py +0 -0
  69. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/test_calendars.py +0 -0
  70. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/test_employees.py +0 -0
  71. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/test_review.py +0 -0
  72. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/models/test_utils.py +0 -0
  73. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/signals.py +0 -0
  74. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/test_permission.py +0 -0
  75. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/tests/test_tasks.py +0 -0
  76. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/urls.py +0 -0
  77. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/utils.py +0 -0
  78. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/__init__.py +0 -0
  79. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/absence_charts.py +0 -0
  80. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/buttons/__init__.py +0 -0
  81. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/buttons/absence.py +0 -0
  82. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/buttons/employee.py +0 -0
  83. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/buttons/kpis.py +0 -0
  84. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/buttons/review.py +0 -0
  85. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/calendars.py +0 -0
  86. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/__init__.py +0 -0
  87. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/absence.py +0 -0
  88. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/calendars.py +0 -0
  89. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/employee.py +0 -0
  90. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/kpis.py +0 -0
  91. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/display/review.py +0 -0
  92. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/employee.py +0 -0
  93. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/__init__.py +0 -0
  94. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/calendars.py +0 -0
  95. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/employee.py +0 -0
  96. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/kpis.py +0 -0
  97. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/endpoints/review.py +0 -0
  98. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/kpi.py +0 -0
  99. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/__init__.py +0 -0
  100. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/absence.py +0 -0
  101. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/administration.py +0 -0
  102. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/calendars.py +0 -0
  103. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/employee.py +0 -0
  104. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/kpis.py +0 -0
  105. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/menu/review.py +0 -0
  106. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/mixins.py +0 -0
  107. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/review.py +0 -0
  108. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/titles/__init__.py +0 -0
  109. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/titles/absence.py +0 -0
  110. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/titles/employee.py +0 -0
  111. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/titles/kpis.py +0 -0
  112. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/titles/review.py +0 -0
  113. {wbhuman_resources-1.59.14 → wbhuman_resources-1.59.16}/wbhuman_resources/viewsets/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbhuman_resources
3
- Version: 1.59.14
3
+ Version: 1.59.16
4
4
  Summary: A workbench module for managing human resources.
5
5
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
6
6
  Requires-Dist: wbcore
@@ -38,6 +38,17 @@ from .preferences import get_previous_year_balance_expiration_date
38
38
  User = get_user_model()
39
39
 
40
40
 
41
+ def can_edit_request(instance: "AbsenceRequest", user: "User") -> bool:
42
+ if (employee := getattr(user.profile, "human_resources", None)) and employee.is_active and user.profile:
43
+ requester = instance.employee
44
+ return instance.status == AbsenceRequest.Status.DRAFT and (
45
+ user.has_perm("wbhuman_resources.administrate_absencerequest")
46
+ or employee.is_manager_of(requester)
47
+ or user.profile == requester.profile
48
+ )
49
+ return False
50
+
51
+
41
52
  def can_cancel_request(instance: "AbsenceRequest", user: "User") -> bool:
42
53
  """
43
54
  Check if the given user has cancel ability on the given request
@@ -1,6 +1,7 @@
1
1
  from .absence import (
2
2
  AbsenceRequestCrossBorderCountryModelSerializer,
3
3
  AbsenceRequestModelSerializer,
4
+ ReadOnlyAbsenceRequestModelSerializer,
4
5
  AbsenceRequestPeriodsModelSerializer,
5
6
  AbsenceRequestTypeModelSerializer,
6
7
  AbsenceRequestTypeRepresentationSerializer,
@@ -269,6 +269,11 @@ class AbsenceRequestModelSerializer(wb_serializers.ModelSerializer):
269
269
  ]
270
270
 
271
271
 
272
+ class ReadOnlyAbsenceRequestModelSerializer(AbsenceRequestModelSerializer):
273
+ class Meta(AbsenceRequestModelSerializer.Meta):
274
+ read_only_fields = AbsenceRequestModelSerializer.Meta.fields
275
+
276
+
272
277
  class EmployeeAbsenceDaysModelSerializer(wb_serializers.ModelSerializer):
273
278
  year = wb_serializers.YearField(read_only=True)
274
279
  absence_type = wb_serializers.ChoiceField(read_only=True, choices=AbsenceRequestType.get_choices())
@@ -32,6 +32,7 @@ from wbhuman_resources.serializers import (
32
32
  AbsenceRequestTypeModelSerializer,
33
33
  AbsenceRequestTypeRepresentationSerializer,
34
34
  EmployeeAbsenceDaysModelSerializer,
35
+ ReadOnlyAbsenceRequestModelSerializer,
35
36
  )
36
37
  from wbhuman_resources.viewsets.buttons import AbsenceRequestButtonConfig
37
38
  from wbhuman_resources.viewsets.display import (
@@ -54,7 +55,7 @@ from wbhuman_resources.viewsets.titles import (
54
55
  AbsenceTypeCountEmployeeTitleConfig,
55
56
  )
56
57
 
57
- from ..models.absence import can_validate_or_deny_request
58
+ from ..models.absence import can_edit_request, can_validate_or_deny_request
58
59
  from .mixins import EmployeeViewMixin
59
60
 
60
61
 
@@ -108,6 +109,17 @@ class AbsenceRequestModelViewSet(EmployeeViewMixin, viewsets.ModelViewSet):
108
109
  return can_validate_or_deny_request(obj, self.request.user)
109
110
  return False
110
111
 
112
+ @cached_property
113
+ def can_edit_request(self) -> bool:
114
+ if "pk" in self.kwargs and (obj := self.get_object()):
115
+ return can_edit_request(obj, self.request.user)
116
+ return True
117
+
118
+ def get_serializer_class(self):
119
+ if self.can_edit_request:
120
+ return AbsenceRequestModelSerializer
121
+ return ReadOnlyAbsenceRequestModelSerializer
122
+
111
123
  def add_messages(
112
124
  self,
113
125
  request,
@@ -18,7 +18,9 @@ class AbsenceRequestEndpointConfig(EndpointViewConfig):
18
18
  return self.get_endpoint()
19
19
 
20
20
  def get_create_endpoint(self, **kwargs):
21
- return self.get_endpoint()
21
+ if (profile := self.request.user.profile) and hasattr(profile, "human_resources"):
22
+ return self.get_endpoint()
23
+ return None
22
24
 
23
25
  def get_delete_endpoint(self, **kwargs):
24
26
  if self.instance: