wbhuman_resources 1.59.5rc0__py2.py3-none-any.whl → 1.59.6__py2.py3-none-any.whl

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.
@@ -22,6 +22,7 @@ class AbsenceRequestTypeFactory(factory.django.DjangoModelFactory):
22
22
  class Meta:
23
23
  model = AbsenceRequestType
24
24
  django_get_or_create = ["title"]
25
+ skip_postgeneration_save = True
25
26
 
26
27
  title = factory.Faker("text", max_nb_chars=64)
27
28
  icon = factory.Iterator(WBIcon.values)
@@ -49,6 +49,7 @@ class DefaultDailyPeriodFactory(factory.django.DjangoModelFactory):
49
49
  class Meta:
50
50
  model = DefaultDailyPeriod
51
51
  django_get_or_create = ["lower_time", "upper_time", "calendar"]
52
+ skip_postgeneration_save = True
52
53
 
53
54
 
54
55
  class DayOffFactory(factory.django.DjangoModelFactory):
@@ -17,6 +17,7 @@ fake = Faker()
17
17
  class PositionFactory(factory.django.DjangoModelFactory):
18
18
  class Meta:
19
19
  model = Position
20
+ skip_postgeneration_save = True
20
21
 
21
22
  name = factory.Faker("text", max_nb_chars=64)
22
23
  manager = None
@@ -32,6 +33,7 @@ class EmployeeHumanResourceFactory(factory.django.DjangoModelFactory):
32
33
  class Meta:
33
34
  model = EmployeeHumanResource
34
35
  django_get_or_create = ["profile"]
36
+ skip_postgeneration_save = True
35
37
 
36
38
  is_active = True
37
39
  profile = factory.SubFactory("wbcore.contrib.authentication.factories.AuthenticatedPersonFactory")
@@ -49,6 +51,7 @@ class EmployeeYearBalanceFactory(factory.django.DjangoModelFactory):
49
51
  class Meta:
50
52
  model = EmployeeYearBalance
51
53
  django_get_or_create = ["employee", "year"]
54
+ skip_postgeneration_save = True
52
55
 
53
56
  employee = factory.SubFactory("wbhuman_resources.factories.EmployeeHumanResourceFactory")
54
57
  year = factory.Faker("pyint", min_value=1970, max_value=2022)
@@ -25,6 +25,7 @@ fake = Faker()
25
25
  class ReviewGroupFactory(factory.django.DjangoModelFactory):
26
26
  class Meta:
27
27
  model = ReviewGroup
28
+ skip_postgeneration_save = True
28
29
 
29
30
  name = factory.Faker("text", max_nb_chars=64)
30
31
 
@@ -123,6 +124,7 @@ class ReviewAnswerNoCategoryFactory(ReviewAnswerFactory):
123
124
  class KPIFactory(factory.django.DjangoModelFactory):
124
125
  class Meta:
125
126
  model = KPI
127
+ skip_postgeneration_save = True
126
128
 
127
129
  name = factory.Faker("pystr")
128
130
  goal = factory.Faker("pyint", min_value=0, max_value=9999)
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.2.9 on 2025-12-09 08:52
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('wbhuman_resources', '0022_remove_review_editable_mode'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name='employeehumanresource',
15
+ name='weekly_off_periods',
16
+ field=models.ManyToManyField(related_name='employees_off', through='wbhuman_resources.EmployeeWeeklyOffPeriods', through_fields=('employee', 'period'), to='wbhuman_resources.defaultdailyperiod', verbose_name='Weekly off periods'),
17
+ ),
18
+ ]
@@ -302,7 +302,7 @@ class DefaultDailyPeriod(models.Model):
302
302
  verbose_name = _("Default Daily Period")
303
303
  verbose_name_plural = _("Default Daily Periods")
304
304
  constraints = [
305
- CheckConstraint(check=Q(upper_time__gt=F("lower_time")), name="check_lower_time_lt_upper_time"),
305
+ CheckConstraint(condition=Q(upper_time__gt=F("lower_time")), name="check_lower_time_lt_upper_time"),
306
306
  ExclusionConstraint(
307
307
  expressions=[("timespan", RangeOperators.OVERLAPS), ("calendar", RangeOperators.EQUAL)],
308
308
  name="check_no_overlapping_default_periods_time",
@@ -10,8 +10,8 @@ from django.utils import timezone
10
10
  from django.utils.dateparse import parse_date
11
11
  from django.utils.translation import gettext as _
12
12
  from wbcore import viewsets
13
- from wbcore.pandas import fields as pf
14
- from wbcore.pandas.views import PandasAPIViewSet
13
+ from wbcore.contrib.pandas import fields as pf
14
+ from wbcore.contrib.pandas.views import PandasAPIViewSet
15
15
  from wbcore.utils.date import get_date_interval_from_request
16
16
 
17
17
  from wbhuman_resources.filters import AbsenceRequestPlannerFilter, AbsenceTableFilter
@@ -104,8 +104,7 @@ def update_layoute(fig, start, end):
104
104
  )
105
105
  ],
106
106
  yaxis=dict(
107
- title="",
108
- titlefont=dict(color="#000000"),
107
+ title=dict(text="", font=dict(color="#000000")),
109
108
  tickfont=dict(size=11, family="Courier", color="#000000"),
110
109
  anchor="x",
111
110
  side="left",
@@ -120,8 +119,7 @@ def update_layoute(fig, start, end):
120
119
  spikethickness=1,
121
120
  ),
122
121
  xaxis=dict(
123
- title="",
124
- titlefont=dict(color="#000000"),
122
+ title=dict(text="", font=dict(color="#000000")),
125
123
  tickfont=dict(color="#000000"),
126
124
  showline=False,
127
125
  linewidth=0.5,
@@ -9,9 +9,9 @@ from django.utils.translation import gettext
9
9
  from django.utils.translation import gettext_lazy as _
10
10
  from rest_framework import filters
11
11
  from wbcore import viewsets
12
+ from wbcore.contrib.pandas import fields as pf
13
+ from wbcore.contrib.pandas.views import PandasAPIViewSet
12
14
  from wbcore.filters import DjangoFilterBackend
13
- from wbcore.pandas import fields as pf
14
- from wbcore.pandas.views import PandasAPIViewSet
15
15
  from wbcore.serializers.serializers import ModelSerializer
16
16
  from wbcore.utils.strings import format_number
17
17
 
@@ -1,6 +1,6 @@
1
1
  import pandas as pd
2
2
  from django.contrib.messages import info, warning
3
- from django.db.models import ExpressionWrapper, F, Q, Value, functions
3
+ from django.db.models import F, Q, Value, functions
4
4
  from django.db.models.fields import CharField
5
5
  from django.shortcuts import get_object_or_404
6
6
  from django.utils import timezone
@@ -12,8 +12,8 @@ from rest_framework.decorators import action
12
12
  from rest_framework.response import Response
13
13
  from wbcore import viewsets
14
14
  from wbcore.contrib.authentication.authentication import JWTCookieAuthentication
15
- from wbcore.pandas import fields as pf
16
- from wbcore.pandas.views import PandasAPIViewSet
15
+ from wbcore.contrib.pandas import fields as pf
16
+ from wbcore.contrib.pandas.views import PandasAPIViewSet
17
17
  from wbcore.utils.strings import format_number
18
18
  from wbcore.utils.views import CloneMixin
19
19
  from wbcore.viewsets.mixins import OrderableMixin
@@ -412,18 +412,16 @@ class ReviewQuestionModelViewSet(OrderableMixin, viewsets.ModelViewSet):
412
412
  super()
413
413
  .get_queryset()
414
414
  .annotate(
415
- review_for=ExpressionWrapper(
416
- functions.Concat(
417
- functions.Cast("for_reviewee", output_field=CharField()),
418
- Value(" / "),
419
- functions.Cast("for_reviewer", output_field=CharField()),
420
- Value(" / "),
421
- functions.Cast("for_department_peers", output_field=CharField()),
422
- Value(" / "),
423
- functions.Cast("for_company_peers", output_field=CharField()),
424
- ),
415
+ review_for=functions.Concat(
416
+ functions.Cast("for_reviewee", output_field=CharField()),
417
+ Value(" / "),
418
+ functions.Cast("for_reviewer", output_field=CharField()),
419
+ Value(" / "),
420
+ functions.Cast("for_department_peers", output_field=CharField()),
421
+ Value(" / "),
422
+ functions.Cast("for_company_peers", output_field=CharField()),
425
423
  output_field=CharField(),
426
- )
424
+ ),
427
425
  )
428
426
  )
429
427
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbhuman_resources
3
- Version: 1.59.5rc0
3
+ Version: 1.59.6
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
7
7
  Requires-Dist: workalendar==17.*
8
- Requires-Dist: xlsxwriter==3.2.5
8
+ Requires-Dist: xlsxwriter==3.2.*
@@ -12,10 +12,10 @@ wbhuman_resources/admin/employee.py,sha256=XfxHCRv3lg9wFiOixIQIEmbRCLtZ3b3VBDS4k
12
12
  wbhuman_resources/admin/kpi.py,sha256=ErNqXohvn-ht9cSFWg2qxd0qWyR6np0QklPARBNlKPI,542
13
13
  wbhuman_resources/admin/review.py,sha256=Fxkfk5Fr3O8aOTGNXzQd8W_XRy4dKbAmBB6thAF6N-c,5038
14
14
  wbhuman_resources/factories/__init__.py,sha256=-7-O4_7YqtwDDQUIRt4hJ6yiSpS0ESMbJTUoIhKPYS4,945
15
- wbhuman_resources/factories/absence.py,sha256=phOAnvpLB-TEFXiNrc5jMbKC_zYT2bvrzyCHbcBfITA,3600
16
- wbhuman_resources/factories/calendars.py,sha256=wXSuwbbSA7WUtAbIYBKS4EYLbcp4EGjUyQw8gDYBR_8,1627
17
- wbhuman_resources/factories/employee.py,sha256=yJPNwDIVGer1yPgJlFnqZGLai9sZ0XHgJj_ZDsqRPVI,2898
18
- wbhuman_resources/factories/kpi.py,sha256=RkaLN1bXmGN_I7v6NnTJBqqWs1AV1jrxgNgTSMf21Fc,5333
15
+ wbhuman_resources/factories/absence.py,sha256=g3n3roqTJPNhRseCkRQ_AmGdafn9Kinfbg6M4s1Daxc,3640
16
+ wbhuman_resources/factories/calendars.py,sha256=sNN2KX1NKXSSnXsQoNPOFh-05R584kel6vZ1O0ZX5no,1667
17
+ wbhuman_resources/factories/employee.py,sha256=gRPUeSSCW__68YjOxjw-c6yXdqvnQSSawYxuY-gZtew,3018
18
+ wbhuman_resources/factories/kpi.py,sha256=1HyTDbD7RhnyT39cbH22k8g164_Wsq50QOxAcSmA998,5413
19
19
  wbhuman_resources/filters/__init__.py,sha256=X3NkjcBU_i_K8cTHEptAH3YRaG1CXQ-JAHW7rqcJ2sI,689
20
20
  wbhuman_resources/filters/absence.py,sha256=yNQDFWeO1kyiXfmLKKLPHReq_r8iwgGYnm0AdwWI-98,3795
21
21
  wbhuman_resources/filters/absence_graphs.py,sha256=L7eN32rJ9V20mPfv5XtuRpH0BUh1V6th7czA-ZTKkXo,2984
@@ -40,10 +40,11 @@ wbhuman_resources/migrations/0019_alter_absencerequest_options_alter_kpi_options
40
40
  wbhuman_resources/migrations/0020_alter_employeeyearbalance_year_alter_review_year.py,sha256=fdt5rwLTNBWM6qN0a3T5b2WZs_BWoDilF1LjLYEe-2Q,788
41
41
  wbhuman_resources/migrations/0021_alter_position_color.py,sha256=i1IPWN4StZ1DoeVgHlzqujzASz2JJeIo5vi07CnQi7Y,506
42
42
  wbhuman_resources/migrations/0022_remove_review_editable_mode.py,sha256=5Q1y_wZZruvKRkK4l6LsHDUYagJ2spWx7RPHfH5X8Pw,2224
43
+ wbhuman_resources/migrations/0023_alter_employeehumanresource_weekly_off_periods.py,sha256=CqsuaO1Jc77wja8LYAQgfYF37BLc9pb69exHDIAa67s,624
43
44
  wbhuman_resources/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  wbhuman_resources/models/__init__.py,sha256=PW4LDmMpJqcynmnbdy_VSwbhxyDU9ZCR2LIXk6LkHlg,631
45
46
  wbhuman_resources/models/absence.py,sha256=WDepyQjrySU860ESSZRP4Z13UlenMZD5JTsDS8Bm7xY,35892
46
- wbhuman_resources/models/calendars.py,sha256=TjUaabVldDY4baZN9tGVJA609LUAZV2pCowTCEa4VYA,14621
47
+ wbhuman_resources/models/calendars.py,sha256=g4AVAmRbe3tZQ0asZUKe8u6Dv1Iw52okutqnbrdZPt4,14625
47
48
  wbhuman_resources/models/employee.py,sha256=9O39lFx1D-9YGSHCUph3ixqccQQaTsVwjWxfLnMhFwE,50350
48
49
  wbhuman_resources/models/kpi.py,sha256=BrYKb56MKm5Ya0sIav3-jmw0qk4zKNoSRr0bYfNM9mk,7270
49
50
  wbhuman_resources/models/preferences.py,sha256=iQhcu-jrEkk8DgM5hgakg5mdkbtlO11KeJC0QpTBcKI,1432
@@ -70,12 +71,12 @@ wbhuman_resources/tests/models/test_review.py,sha256=YZHxBmvqEpvbSaePldJZ1vzFk7F
70
71
  wbhuman_resources/tests/models/test_utils.py,sha256=f3df5rpk7--6_kM1XGspeCrDUYto0m97i8Cs8pYM7B4,4676
71
72
  wbhuman_resources/viewsets/__init__.py,sha256=Yg_nkFnzkf_HGmScY6jcZBXcFcwJ4ePW5gKwpaG2ybU,2142
72
73
  wbhuman_resources/viewsets/absence.py,sha256=eY67-chD5RXX7_jt3rPVSZTili_p2jY52QMNy13h1jU,13191
73
- wbhuman_resources/viewsets/absence_charts.py,sha256=1z8lKt-8O7MhePBVHZTbgeZlD0X0IcP8JnhA_gKU7qw,12303
74
+ wbhuman_resources/viewsets/absence_charts.py,sha256=eML8_ayANy0GjeUTpfXyivQAeFJxEUroOOk59j5Nod0,12307
74
75
  wbhuman_resources/viewsets/calendars.py,sha256=qX5rPnw6f6LBYd8_vxc17AUtX22LGwhZs5_fiO2sBbE,3153
75
76
  wbhuman_resources/viewsets/employee.py,sha256=ffJpIrV2f2n_a2I-Dx6XXlirLO6G3D83cdpwZDKBAVI,7345
76
- wbhuman_resources/viewsets/kpi.py,sha256=Ua_IEaFz20Nv1g7HhFl0o4Vd86gnC2YcdzaKd2nFcEs,10952
77
+ wbhuman_resources/viewsets/kpi.py,sha256=eZfYwIZwG3xCNXG5gcE_p74VJFueQhNkt8z-rN73ydk,10968
77
78
  wbhuman_resources/viewsets/mixins.py,sha256=ziLsNSENzxTcFQStsNZgsHeqQRKEQnHeryFigND2pMI,458
78
- wbhuman_resources/viewsets/review.py,sha256=fFMx2R_uWxdKSroaHTEA8cQaEHy1akhRLyRnk3gDGQM,32602
79
+ wbhuman_resources/viewsets/review.py,sha256=B5a8zBgWgLxNmbCp2EzY0-nLCTW75e2rPYr5VyEZ5J4,32510
79
80
  wbhuman_resources/viewsets/utils.py,sha256=stM4coAl9JVLdJ1Q2z4ziDOoNSNXugydpT4a4Tv9N2s,969
80
81
  wbhuman_resources/viewsets/buttons/__init__.py,sha256=bjyHwL71gqYc5hz13GtDU7l8ocOscBgThet7FIesZ_s,248
81
82
  wbhuman_resources/viewsets/buttons/absence.py,sha256=wEumCQ3qEomU9-RrsSCJS_A2FeBChTPoaOXANyP0uOU,1227
@@ -106,6 +107,6 @@ wbhuman_resources/viewsets/titles/absence.py,sha256=4F4ENgmZBGKiDuC8DmgrklNXEsRo
106
107
  wbhuman_resources/viewsets/titles/employee.py,sha256=VP_AC3E-3fpbO8-RUvi2haXcoJr9LVLYtJifGawVRGo,565
107
108
  wbhuman_resources/viewsets/titles/kpis.py,sha256=OSH_vIsIjfThWn17X_K7ykBKAFqNvz8M4PyFCF8BRQo,491
108
109
  wbhuman_resources/viewsets/titles/review.py,sha256=fL_PqTNAIK7alk_-7RaklkiR9guh54u8oS0m5AWOSSc,2458
109
- wbhuman_resources-1.59.5rc0.dist-info/METADATA,sha256=qucG9-kDYTz51p0pL2lFGg_34I1Lc7aBcRTQLuz39hU,275
110
- wbhuman_resources-1.59.5rc0.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
111
- wbhuman_resources-1.59.5rc0.dist-info/RECORD,,
110
+ wbhuman_resources-1.59.6.dist-info/METADATA,sha256=WLut_AjVN10XEhItGTs9QpL81gGV8VcjCHMpO9mxZfM,272
111
+ wbhuman_resources-1.59.6.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
112
+ wbhuman_resources-1.59.6.dist-info/RECORD,,