wbhuman_resources 1.59.16__py2.py3-none-any.whl → 1.60.0__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.
- wbhuman_resources/locale/de/LC_MESSAGES/django.mo +0 -0
- wbhuman_resources/locale/de/LC_MESSAGES/django.po +252 -257
- wbhuman_resources/locale/en/LC_MESSAGES/django.po +248 -252
- wbhuman_resources/locale/fr/LC_MESSAGES/django.po +251 -256
- wbhuman_resources/models/absence.py +6 -3
- wbhuman_resources/models/employee.py +22 -7
- wbhuman_resources/models/kpi.py +12 -0
- wbhuman_resources/models/review.py +25 -20
- wbhuman_resources/permissions/backend.py +1 -3
- wbhuman_resources/tests/test_permission.py +1 -2
- wbhuman_resources/viewsets/absence.py +1 -1
- wbhuman_resources/viewsets/endpoints/absence.py +2 -1
- wbhuman_resources/viewsets/menu/absence.py +6 -1
- {wbhuman_resources-1.59.16.dist-info → wbhuman_resources-1.60.0.dist-info}/METADATA +1 -1
- {wbhuman_resources-1.59.16.dist-info → wbhuman_resources-1.60.0.dist-info}/RECORD +16 -16
- {wbhuman_resources-1.59.16.dist-info → wbhuman_resources-1.60.0.dist-info}/WHEEL +0 -0
|
@@ -2,7 +2,6 @@ from datetime import timedelta
|
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
from django.contrib import admin
|
|
5
|
-
from django.contrib.auth import get_user_model
|
|
6
5
|
from django.contrib.auth.models import Group
|
|
7
6
|
from django.contrib.postgres.constraints import ExclusionConstraint
|
|
8
7
|
from django.contrib.postgres.fields import DateTimeRangeField, RangeOperators
|
|
@@ -20,6 +19,7 @@ from django_fsm import FSMField, transition
|
|
|
20
19
|
from pandas._libs.tslibs.offsets import BDay
|
|
21
20
|
from psycopg.types.range import TimestamptzRange
|
|
22
21
|
from wbcore.contrib.agenda.models import CalendarItem
|
|
22
|
+
from wbcore.contrib.authentication.models.users import User
|
|
23
23
|
from wbcore.contrib.geography.models import Geography
|
|
24
24
|
from wbcore.contrib.icons import WBIcon
|
|
25
25
|
from wbcore.contrib.notifications.dispatch import send_notification
|
|
@@ -35,11 +35,14 @@ from wbcore.utils.models import CalendarItemTypeMixin
|
|
|
35
35
|
from .calendars import DayOff, DefaultDailyPeriod
|
|
36
36
|
from .preferences import get_previous_year_balance_expiration_date
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
|
|
39
|
+
def get_valid_employee_human_resource(user: "User"):
|
|
40
|
+
if (employee := getattr(user.profile, "human_resources", None)) and employee.is_active and user.profile:
|
|
41
|
+
return employee
|
|
39
42
|
|
|
40
43
|
|
|
41
44
|
def can_edit_request(instance: "AbsenceRequest", user: "User") -> bool:
|
|
42
|
-
if
|
|
45
|
+
if employee := get_valid_employee_human_resource(user):
|
|
43
46
|
requester = instance.employee
|
|
44
47
|
return instance.status == AbsenceRequest.Status.DRAFT and (
|
|
45
48
|
user.has_perm("wbhuman_resources.administrate_absencerequest")
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import math
|
|
2
2
|
import operator
|
|
3
|
+
from contextlib import suppress
|
|
3
4
|
from datetime import date, datetime, timedelta
|
|
4
5
|
from functools import reduce
|
|
5
6
|
from typing import Generator, List, Optional, Tuple, Type, TypeVar
|
|
@@ -8,7 +9,6 @@ import pandas as pd
|
|
|
8
9
|
from celery import shared_task
|
|
9
10
|
from colorfield.fields import ColorField
|
|
10
11
|
from django.contrib import admin
|
|
11
|
-
from django.contrib.auth import get_user_model
|
|
12
12
|
from django.contrib.auth.models import Group, Permission
|
|
13
13
|
from django.contrib.contenttypes.models import ContentType
|
|
14
14
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
@@ -38,6 +38,7 @@ from django.utils.translation import gettext_lazy as _
|
|
|
38
38
|
from dynamic_preferences.registries import global_preferences_registry
|
|
39
39
|
from mptt.models import MPTTModel, TreeForeignKey
|
|
40
40
|
from psycopg.types.range import TimestamptzRange
|
|
41
|
+
from wbcore.contrib.authentication.models.users import User
|
|
41
42
|
from wbcore.contrib.directory.models import (
|
|
42
43
|
Company,
|
|
43
44
|
EmployerEmployeeRelationship,
|
|
@@ -49,7 +50,8 @@ from wbcore.contrib.notifications.dispatch import send_notification
|
|
|
49
50
|
from wbcore.contrib.notifications.utils import create_notification_type
|
|
50
51
|
from wbcore.models import WBModel
|
|
51
52
|
from wbcore.models.fields import YearField
|
|
52
|
-
from wbcore.
|
|
53
|
+
from wbcore.signals import pre_merge
|
|
54
|
+
from wbcore.utils.models import ComplexToStringMixin, MergeError
|
|
53
55
|
from wbcore.workers import Queue
|
|
54
56
|
|
|
55
57
|
from wbhuman_resources.signals import add_employee_activity_to_daily_brief
|
|
@@ -64,8 +66,6 @@ from .preferences import (
|
|
|
64
66
|
long_vacation_number_of_days,
|
|
65
67
|
)
|
|
66
68
|
|
|
67
|
-
User = get_user_model()
|
|
68
|
-
|
|
69
69
|
|
|
70
70
|
class ActiveEmployeeManager(models.Manager):
|
|
71
71
|
"""Custom Manager for filtering directly Active Employees. Exclude objects without reverse related field user_account and profile"""
|
|
@@ -543,8 +543,7 @@ class EmployeeHumanResource(ComplexToStringMixin, WBModel):
|
|
|
543
543
|
The administrator user accounts (as queryset)
|
|
544
544
|
"""
|
|
545
545
|
return (
|
|
546
|
-
|
|
547
|
-
.objects.filter(is_active=True, profile__isnull=False)
|
|
546
|
+
User.objects.filter(is_active=True, profile__isnull=False)
|
|
548
547
|
.filter(
|
|
549
548
|
Q(groups__permissions__codename="administrate_absencerequest")
|
|
550
549
|
| Q(user_permissions__codename="administrate_absencerequest")
|
|
@@ -1198,7 +1197,7 @@ def deactivate_profile_as_task(requester_id: int, employee_id: int, substitute_i
|
|
|
1198
1197
|
substitute_id: The potential Profile id to replace this employee's resources
|
|
1199
1198
|
|
|
1200
1199
|
"""
|
|
1201
|
-
requester =
|
|
1200
|
+
requester = User.objects.get(id=requester_id)
|
|
1202
1201
|
employee = EmployeeHumanResource.objects.get(id=employee_id)
|
|
1203
1202
|
substitute = None
|
|
1204
1203
|
if substitute_id:
|
|
@@ -1242,3 +1241,19 @@ def daily_birthday(sender, instance: Person, val_date: date, **kwargs) -> tuple[
|
|
|
1242
1241
|
return "Today Birthdays", _("Today is {}'s birthday, Which them a happy birthday!").format(
|
|
1243
1242
|
birthday_firstnames_humanized
|
|
1244
1243
|
)
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
@receiver(pre_merge, sender="directory.Person")
|
|
1247
|
+
def pre_merge_person_employee(sender: models.Model, merged_object, main_object, **kwargs):
|
|
1248
|
+
Position.objects.filter(manager=merged_object).update(manager=main_object)
|
|
1249
|
+
EmployeeHumanResource.objects.filter(direct_manager=merged_object).update(direct_manager=main_object)
|
|
1250
|
+
|
|
1251
|
+
with suppress(EmployeeHumanResource.DoesNotExist):
|
|
1252
|
+
hr = EmployeeHumanResource.objects.get(profile=merged_object)
|
|
1253
|
+
if EmployeeHumanResource.objects.filter(profile=main_object).exists():
|
|
1254
|
+
raise MergeError(
|
|
1255
|
+
f"We cannot safely merge directory profile {merged_object} into {main_object}: A HR profile already exists for {main_object}"
|
|
1256
|
+
)
|
|
1257
|
+
else:
|
|
1258
|
+
hr.profile = main_object
|
|
1259
|
+
hr.save()
|
wbhuman_resources/models/kpi.py
CHANGED
|
@@ -8,9 +8,11 @@ from django.conf import settings
|
|
|
8
8
|
from django.contrib.postgres.fields import DateRangeField
|
|
9
9
|
from django.db import models
|
|
10
10
|
from django.db.models.query import QuerySet
|
|
11
|
+
from django.dispatch import receiver
|
|
11
12
|
from django.utils.translation import gettext_lazy as _
|
|
12
13
|
from wbcore.models import WBModel
|
|
13
14
|
from wbcore.serializers.serializers import ModelSerializer
|
|
15
|
+
from wbcore.signals import pre_merge
|
|
14
16
|
|
|
15
17
|
|
|
16
18
|
class KPIHandler(Protocol):
|
|
@@ -197,3 +199,13 @@ class Evaluation(models.Model):
|
|
|
197
199
|
rating = (self.evaluated_score / goal_expected * 100).round(2)
|
|
198
200
|
rating = round(rating / 100 * 4)
|
|
199
201
|
return 1 if rating < 1 else rating if rating < 4 else 4
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
@receiver(pre_merge, sender="directory.Person")
|
|
205
|
+
def pre_merge_person_kpi(sender: models.Model, merged_object, main_object, **kwargs):
|
|
206
|
+
Evaluation.objects.filter(person=merged_object).update(person=main_object)
|
|
207
|
+
|
|
208
|
+
for kpi in KPI.objects.filter(evaluated_persons=merged_object):
|
|
209
|
+
kpi.evaluated_persons.remove(merged_object)
|
|
210
|
+
if main_object not in kpi.evaluated_persons.all():
|
|
211
|
+
kpi.evaluated_persons.add(main_object)
|
|
@@ -4,7 +4,6 @@ from typing import TypeVar
|
|
|
4
4
|
|
|
5
5
|
from celery import shared_task
|
|
6
6
|
from django.conf import settings
|
|
7
|
-
from django.contrib.auth import get_user_model
|
|
8
7
|
from django.contrib.sites.models import Site
|
|
9
8
|
from django.core.files.base import ContentFile
|
|
10
9
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
@@ -30,6 +29,7 @@ from django.utils.translation import gettext
|
|
|
30
29
|
from django.utils.translation import gettext_lazy as _
|
|
31
30
|
from django_fsm import FSMField, transition
|
|
32
31
|
from slugify import slugify
|
|
32
|
+
from wbcore.contrib.authentication.models.users import User
|
|
33
33
|
from wbcore.contrib.color.enums import WBColor
|
|
34
34
|
from wbcore.contrib.directory.models import Person
|
|
35
35
|
from wbcore.contrib.documents.models import Document, DocumentType
|
|
@@ -42,6 +42,7 @@ from wbcore.metadata.configs.buttons import ActionButton, ButtonDefaultColor
|
|
|
42
42
|
from wbcore.models import WBModel
|
|
43
43
|
from wbcore.models.fields import YearField
|
|
44
44
|
from wbcore.models.orderable import OrderableModel
|
|
45
|
+
from wbcore.signals import pre_merge
|
|
45
46
|
from wbcore.utils.models import CloneMixin, ComplexToStringMixin
|
|
46
47
|
from wbcore.workers import Queue
|
|
47
48
|
from weasyprint import HTML
|
|
@@ -50,7 +51,6 @@ from wbhuman_resources.models.employee import get_main_company
|
|
|
50
51
|
from wbhuman_resources.models.kpi import Evaluation
|
|
51
52
|
|
|
52
53
|
SelfReview = TypeVar("SelfReview", bound="Review")
|
|
53
|
-
User = get_user_model()
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
def can_trigger_review(instance, user):
|
|
@@ -239,14 +239,10 @@ class Review(CloneMixin, ComplexToStringMixin, WBModel):
|
|
|
239
239
|
|
|
240
240
|
@classmethod
|
|
241
241
|
def get_administrators(cls) -> QuerySet[User]:
|
|
242
|
-
return (
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
| Q(user_permissions__codename="administrate_review")
|
|
247
|
-
)
|
|
248
|
-
.distinct()
|
|
249
|
-
)
|
|
242
|
+
return User.objects.filter(
|
|
243
|
+
Q(groups__permissions__codename="administrate_review")
|
|
244
|
+
| Q(user_permissions__codename="administrate_review")
|
|
245
|
+
).distinct()
|
|
250
246
|
|
|
251
247
|
@transition(
|
|
252
248
|
field=status,
|
|
@@ -374,14 +370,10 @@ class Review(CloneMixin, ComplexToStringMixin, WBModel):
|
|
|
374
370
|
},
|
|
375
371
|
)
|
|
376
372
|
def validation(self, by=None, description=None, **kwargs):
|
|
377
|
-
users = (
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
| Q(user_permissions__codename="administrate_review")
|
|
382
|
-
)
|
|
383
|
-
.distinct()
|
|
384
|
-
)
|
|
373
|
+
users = User.objects.filter(
|
|
374
|
+
Q(groups__permissions__codename="administrate_review")
|
|
375
|
+
| Q(user_permissions__codename="administrate_review")
|
|
376
|
+
).distinct()
|
|
385
377
|
for user in users:
|
|
386
378
|
send_review_report_via_mail.delay(user.id, self.id)
|
|
387
379
|
|
|
@@ -771,7 +763,7 @@ def finalize_review(review_id):
|
|
|
771
763
|
|
|
772
764
|
@shared_task(queue=Queue.DEFAULT.value)
|
|
773
765
|
def submit_reviews_from_group(group_id, user_id):
|
|
774
|
-
user =
|
|
766
|
+
user = User.objects.get(id=user_id)
|
|
775
767
|
|
|
776
768
|
reviews = Review.objects.filter(
|
|
777
769
|
Q(review_group__id=group_id)
|
|
@@ -959,7 +951,7 @@ def submit_review(review_id):
|
|
|
959
951
|
|
|
960
952
|
@shared_task(queue=Queue.DEFAULT.value)
|
|
961
953
|
def send_review_report_via_mail(user_id, review_id):
|
|
962
|
-
user =
|
|
954
|
+
user = User.objects.get(id=user_id)
|
|
963
955
|
review = Review.objects.get(id=review_id)
|
|
964
956
|
pdf_content = review.generate_pdf()
|
|
965
957
|
filename = f"{slugify(str(review))}.pdf"
|
|
@@ -981,3 +973,16 @@ def send_review_report_via_mail(user_id, review_id):
|
|
|
981
973
|
document.link(review)
|
|
982
974
|
|
|
983
975
|
document.send_email(to_emails=user.email, as_link=True, subject=gettext("Review PDF - ") + review.computed_str)
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
@receiver(pre_merge, sender="directory.Person")
|
|
979
|
+
def pre_merge_person_review(sender: models.Model, merged_object, main_object, **kwargs):
|
|
980
|
+
ReviewAnswer.objects.filter(answered_by=merged_object).update(answered_by=main_object)
|
|
981
|
+
Review.objects.filter(reviewee=merged_object).update(reviewee=main_object)
|
|
982
|
+
Review.objects.filter(reviewer=merged_object).update(reviewer=main_object)
|
|
983
|
+
Review.objects.filter(moderator=merged_object).update(moderator=main_object)
|
|
984
|
+
|
|
985
|
+
for group in ReviewGroup.objects.filter(employees=merged_object):
|
|
986
|
+
group.employees.remove(merged_object)
|
|
987
|
+
if main_object not in group.employees.all():
|
|
988
|
+
group.employees.add(main_object)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
from django.contrib.auth import get_user_model
|
|
2
1
|
from django.db.models import Q, QuerySet
|
|
2
|
+
from wbcore.contrib.authentication.models.users import User
|
|
3
3
|
from wbcore.permissions.backend import UserBackend as BaseUserBackend
|
|
4
4
|
|
|
5
5
|
from wbhuman_resources.models.employee import EmployeeHumanResource
|
|
6
6
|
|
|
7
|
-
User = get_user_model()
|
|
8
|
-
|
|
9
7
|
|
|
10
8
|
class UserBackend(BaseUserBackend):
|
|
11
9
|
"""
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import pytest
|
|
2
|
-
from django.contrib.auth import get_user_model
|
|
3
2
|
from dynamic_preferences.registries import global_preferences_registry
|
|
4
3
|
from faker import Faker
|
|
5
4
|
from rest_framework.test import APIRequestFactory
|
|
6
5
|
from wbcore.contrib.authentication.factories import UserFactory
|
|
6
|
+
from wbcore.contrib.authentication.models.users import User
|
|
7
7
|
from wbcore.permissions.shortcuts import is_internal_user
|
|
8
8
|
|
|
9
9
|
from wbhuman_resources.factories.employee import EmployeeHumanResourceFactory
|
|
10
10
|
from wbhuman_resources.models.employee import EmployeeHumanResource
|
|
11
11
|
|
|
12
|
-
User = get_user_model()
|
|
13
12
|
fake = Faker()
|
|
14
13
|
|
|
15
14
|
|
|
@@ -246,7 +246,7 @@ class AbsenceRequestTypeModelViewSet(viewsets.ModelViewSet):
|
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
class AbsenceTypeCountEmployeeModelViewSet(viewsets.ModelViewSet):
|
|
249
|
-
|
|
249
|
+
ONLY_READ_ONLY_ENDPOINT = True
|
|
250
250
|
queryset = AbsenceRequestPeriods.objects.all()
|
|
251
251
|
serializer_class = EmployeeAbsenceDaysModelSerializer
|
|
252
252
|
|
|
@@ -2,6 +2,7 @@ from rest_framework.reverse import reverse
|
|
|
2
2
|
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
3
|
|
|
4
4
|
from wbhuman_resources.models import AbsenceRequest, EmployeeHumanResource
|
|
5
|
+
from wbhuman_resources.models.absence import get_valid_employee_human_resource
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class AbsenceRequestEndpointConfig(EndpointViewConfig):
|
|
@@ -18,7 +19,7 @@ class AbsenceRequestEndpointConfig(EndpointViewConfig):
|
|
|
18
19
|
return self.get_endpoint()
|
|
19
20
|
|
|
20
21
|
def get_create_endpoint(self, **kwargs):
|
|
21
|
-
if (
|
|
22
|
+
if get_valid_employee_human_resource(self.request.user) is not None:
|
|
22
23
|
return self.get_endpoint()
|
|
23
24
|
return None
|
|
24
25
|
|
|
@@ -2,6 +2,8 @@ from django.utils.translation import gettext as _
|
|
|
2
2
|
from wbcore.menus import ItemPermission, MenuItem
|
|
3
3
|
from wbcore.permissions.shortcuts import is_internal_user
|
|
4
4
|
|
|
5
|
+
from wbhuman_resources.models.absence import get_valid_employee_human_resource
|
|
6
|
+
|
|
5
7
|
ABSENCEPLANNER_MENUITEM = MenuItem(
|
|
6
8
|
label=_("Absence Graph"),
|
|
7
9
|
endpoint="wbhuman_resources:absenceplanner-list",
|
|
@@ -28,7 +30,10 @@ ABSENCEREQUEST_MENUITEM = MenuItem(
|
|
|
28
30
|
label=_("Add Requests"),
|
|
29
31
|
endpoint="wbhuman_resources:absencerequest-list",
|
|
30
32
|
permission=ItemPermission(
|
|
31
|
-
method=lambda request: is_internal_user(request.user)
|
|
33
|
+
method=lambda request: is_internal_user(request.user)
|
|
34
|
+
and get_valid_employee_human_resource(request.user) is not None,
|
|
35
|
+
permissions=["wbhuman_resources.add_absencerequest"],
|
|
36
|
+
include_superuser=False,
|
|
32
37
|
),
|
|
33
38
|
),
|
|
34
39
|
)
|
|
@@ -24,13 +24,13 @@ wbhuman_resources/filters/employee.py,sha256=DmtqdWldt2vRkhk78T61i7dFy9KeI7FuBES
|
|
|
24
24
|
wbhuman_resources/filters/kpi.py,sha256=OFEgDDfEw6kSn890rQlsJfFtVIWBziyRqf7HvG30Dt8,946
|
|
25
25
|
wbhuman_resources/filters/review.py,sha256=uqtms_Yx4mioknpnJ-RqKczS6XJsH0pvyYKqJ7ZeOnM,3988
|
|
26
26
|
wbhuman_resources/filters/signals.py,sha256=2NJp-rrIKcnGL8RyT2B7XU1dBUNi7rwaQz5mWUvyGhY,967
|
|
27
|
-
wbhuman_resources/locale/de/LC_MESSAGES/django.mo,sha256=
|
|
28
|
-
wbhuman_resources/locale/de/LC_MESSAGES/django.po,sha256=
|
|
27
|
+
wbhuman_resources/locale/de/LC_MESSAGES/django.mo,sha256=q6qaclTJoHduYVyfuzr_wtVNdgytigG0yy87_HNYW1c,32978
|
|
28
|
+
wbhuman_resources/locale/de/LC_MESSAGES/django.po,sha256=bViBZaQ_0diW9yvJqk9duHrzsT5vzfQoqEokyJJkTB0,59711
|
|
29
29
|
wbhuman_resources/locale/de/LC_MESSAGES/django.po.translated,sha256=HGb5_CwYFpKdRg3QFgQ5_LOWtCPolWQUg3-BBK_sc0A,78574
|
|
30
30
|
wbhuman_resources/locale/en/LC_MESSAGES/django.mo,sha256=UXCQbz2AxBvh-IQ7bGgjoBnijo8h9DfE9107A-2Mgkk,337
|
|
31
|
-
wbhuman_resources/locale/en/LC_MESSAGES/django.po,sha256=
|
|
31
|
+
wbhuman_resources/locale/en/LC_MESSAGES/django.po,sha256=WZ5V8GTfF1-uBlfIs9vK2TxQQ-aWhchcSTYXoYcNw0E,46197
|
|
32
32
|
wbhuman_resources/locale/fr/LC_MESSAGES/django.mo,sha256=t4lh3zX7kshbDAFzXa5HU_YGPXkPzKqODNXL2MeZ5KQ,429
|
|
33
|
-
wbhuman_resources/locale/fr/LC_MESSAGES/django.po,sha256=
|
|
33
|
+
wbhuman_resources/locale/fr/LC_MESSAGES/django.po,sha256=4Favh1z4H2L9NL9_7SLYin1ysKt4D-x9lg_N2K99lG8,46292
|
|
34
34
|
wbhuman_resources/management/__init__.py,sha256=1KGHz86f8bIswGasUyHvQoigCVU1i8IEyzlPLr6U60Y,879
|
|
35
35
|
wbhuman_resources/migrations/0001_initial_squashed_squashed_0015_alter_absencerequest_calendaritem_ptr_and_more.py,sha256=G4CTuIo6tmYKHHH2957uJMG2Xqiv84hIPpNEVC8cWds,41304
|
|
36
36
|
wbhuman_resources/migrations/0016_alter_employeehumanresource_options.py,sha256=-PJstNsJpIUOmQ3-VSJuqCGHm4Xa3wLGLfm9gYnqUf4,624
|
|
@@ -44,14 +44,14 @@ wbhuman_resources/migrations/0023_alter_employeehumanresource_weekly_off_periods
|
|
|
44
44
|
wbhuman_resources/migrations/0024_alter_absencerequestperiods_unique_together_and_more.py,sha256=djPNPo9m_uWKEYJ3BmR_5-dJHjI7qxtU6oIixml3F1Y,1727
|
|
45
45
|
wbhuman_resources/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
wbhuman_resources/models/__init__.py,sha256=PW4LDmMpJqcynmnbdy_VSwbhxyDU9ZCR2LIXk6LkHlg,631
|
|
47
|
-
wbhuman_resources/models/absence.py,sha256=
|
|
47
|
+
wbhuman_resources/models/absence.py,sha256=WVjwBzRFTFYscvMqy4uJZYNeN2PcZufXdQ9w_J-iRVk,36590
|
|
48
48
|
wbhuman_resources/models/calendars.py,sha256=ci7bBdftBd_AWdSmbkH4a12Nq9CbGoyrP3rdx0LKFFA,14680
|
|
49
|
-
wbhuman_resources/models/employee.py,sha256=
|
|
50
|
-
wbhuman_resources/models/kpi.py,sha256=
|
|
49
|
+
wbhuman_resources/models/employee.py,sha256=7OYxFypgwhJ0zZHqvF58O82G3B_LBgQVk1Ca4JkY5rg,51385
|
|
50
|
+
wbhuman_resources/models/kpi.py,sha256=h3uTHYFE_Yp9599O0H3g3yOEoCsU2cojbIjJwsmj9Co,7790
|
|
51
51
|
wbhuman_resources/models/preferences.py,sha256=iQhcu-jrEkk8DgM5hgakg5mdkbtlO11KeJC0QpTBcKI,1432
|
|
52
|
-
wbhuman_resources/models/review.py,sha256=
|
|
52
|
+
wbhuman_resources/models/review.py,sha256=YXzM9Lbn7IbHSXfXUtj_sqEKjDKVxB5qCYedzUrZMe0,40120
|
|
53
53
|
wbhuman_resources/permissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
-
wbhuman_resources/permissions/backend.py,sha256=
|
|
54
|
+
wbhuman_resources/permissions/backend.py,sha256=T3AwS-ISmUUYndW963jgOO3qo_QUHzR_v7GecduMG8Y,860
|
|
55
55
|
wbhuman_resources/serializers/__init__.py,sha256=GBVNCUCPr5RSZhy3gx8fksMu0GP4ORKT-TOGVe4heF0,1663
|
|
56
56
|
wbhuman_resources/serializers/absence.py,sha256=J288306nQHHeK2W04BZhSST2-oEPXTvxCF9tSSy5c7A,12183
|
|
57
57
|
wbhuman_resources/serializers/calendars.py,sha256=bvnGbZZtr4QckwAkajuS_b69zJOF6msYjh0mu7d4Crs,2384
|
|
@@ -62,7 +62,7 @@ wbhuman_resources/templates/review/review_report.html,sha256=gQzrmtAwrjpAAVXtxYp
|
|
|
62
62
|
wbhuman_resources/tests/__init__.py,sha256=YiG81oh2Z7zj69rm34NBf5R0VniHawVUBWXqgdZG9NA,24
|
|
63
63
|
wbhuman_resources/tests/conftest.py,sha256=RUEBcTl9x_m378xjCEhiHpWNLs8GmvcCpCvkCuhVuks,3101
|
|
64
64
|
wbhuman_resources/tests/signals.py,sha256=5BAx5SpPdUXOW3VHMidbSmdUpk41gCih1rBxpulCFrs,4379
|
|
65
|
-
wbhuman_resources/tests/test_permission.py,sha256=
|
|
65
|
+
wbhuman_resources/tests/test_permission.py,sha256=Wbk8PijeNPpl2mzpiRwjYm_67d5urh0W7e5uvtBH5T0,2467
|
|
66
66
|
wbhuman_resources/tests/test_tasks.py,sha256=RanSdytvm525K_JjUDuwaG4oLBRldbpFpJEdGy7eUR4,3265
|
|
67
67
|
wbhuman_resources/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
wbhuman_resources/tests/models/test_absences.py,sha256=Ski8-aycJcOFsTU_Ucfwh9dGS9Bpr7NXYtrARg_X_vg,22874
|
|
@@ -71,7 +71,7 @@ wbhuman_resources/tests/models/test_employees.py,sha256=vubEioP9LDcH5OCi4gK4Mrto
|
|
|
71
71
|
wbhuman_resources/tests/models/test_review.py,sha256=YZHxBmvqEpvbSaePldJZ1vzFk7F6Hq1paDrrrODIoGY,4527
|
|
72
72
|
wbhuman_resources/tests/models/test_utils.py,sha256=f3df5rpk7--6_kM1XGspeCrDUYto0m97i8Cs8pYM7B4,4676
|
|
73
73
|
wbhuman_resources/viewsets/__init__.py,sha256=Yg_nkFnzkf_HGmScY6jcZBXcFcwJ4ePW5gKwpaG2ybU,2142
|
|
74
|
-
wbhuman_resources/viewsets/absence.py,sha256=
|
|
74
|
+
wbhuman_resources/viewsets/absence.py,sha256=qLyacbEk3xLIU7QKk2c0A1bSk_slnBr7ClHeVxxtlfU,13644
|
|
75
75
|
wbhuman_resources/viewsets/absence_charts.py,sha256=eML8_ayANy0GjeUTpfXyivQAeFJxEUroOOk59j5Nod0,12307
|
|
76
76
|
wbhuman_resources/viewsets/calendars.py,sha256=qX5rPnw6f6LBYd8_vxc17AUtX22LGwhZs5_fiO2sBbE,3153
|
|
77
77
|
wbhuman_resources/viewsets/employee.py,sha256=ffJpIrV2f2n_a2I-Dx6XXlirLO6G3D83cdpwZDKBAVI,7345
|
|
@@ -91,13 +91,13 @@ wbhuman_resources/viewsets/display/employee.py,sha256=5DU_s61Ad0NsCqunes6vLDqzCt
|
|
|
91
91
|
wbhuman_resources/viewsets/display/kpis.py,sha256=40RM0Bq7nWpMc0b29kJhgynDjMyUoedcld1AlQ5w21I,3668
|
|
92
92
|
wbhuman_resources/viewsets/display/review.py,sha256=9vW-h8oY4GBf5I8scUI48EPZPWpNIZ70ht5QT9Hy-DY,18879
|
|
93
93
|
wbhuman_resources/viewsets/endpoints/__init__.py,sha256=4wnSFaRKJwTcK2_F7upzVZKPtK5BLcLRpOPcECq9in8,1450
|
|
94
|
-
wbhuman_resources/viewsets/endpoints/absence.py,sha256=
|
|
94
|
+
wbhuman_resources/viewsets/endpoints/absence.py,sha256=Zw6WG7Wf_yN22cGvi6vD7Sz2Kp8EhPk6prQr5Bj4mz4,2043
|
|
95
95
|
wbhuman_resources/viewsets/endpoints/calendars.py,sha256=Rt-fMwNBQCugBE3-LLK3P3OsF7upbEPm2pyy175ZcPM,640
|
|
96
96
|
wbhuman_resources/viewsets/endpoints/employee.py,sha256=BAp6Y1YNlBFCA-jK-dk2L32kq-zF4u1aWxh526PvYOw,1653
|
|
97
97
|
wbhuman_resources/viewsets/endpoints/kpis.py,sha256=NzN641_p_J_-84pOXc6niG3gUXHDR72S6JGpLE-jxqQ,1498
|
|
98
98
|
wbhuman_resources/viewsets/endpoints/review.py,sha256=a5wOCc0e0hwupUtjjO4qeAJpMK794P4Jrg08zC_k8zY,7371
|
|
99
99
|
wbhuman_resources/viewsets/menu/__init__.py,sha256=gQpSPILszyjF4baPkPfq0LQYRmBPUYsKUpfFB38dV60,617
|
|
100
|
-
wbhuman_resources/viewsets/menu/absence.py,sha256=
|
|
100
|
+
wbhuman_resources/viewsets/menu/absence.py,sha256=PuKnItKh82hMjoEIhNU8zBqo9c62rHZpokgjw8PEeBM,2069
|
|
101
101
|
wbhuman_resources/viewsets/menu/administration.py,sha256=pnRnFrPfHRzwdyXQk1X50bXGUDxCJarUEWgkrGOnnpI,384
|
|
102
102
|
wbhuman_resources/viewsets/menu/calendars.py,sha256=kTLaIqME_9nEA7i3B6TrpCqzHt5LDIlg520C-aWJ2OM,1228
|
|
103
103
|
wbhuman_resources/viewsets/menu/employee.py,sha256=rDLJz0WXXZ-c4vNgTNJB9qNLvU5HI_KiIeAKAvj1aMc,1562
|
|
@@ -108,6 +108,6 @@ wbhuman_resources/viewsets/titles/absence.py,sha256=4F4ENgmZBGKiDuC8DmgrklNXEsRo
|
|
|
108
108
|
wbhuman_resources/viewsets/titles/employee.py,sha256=VP_AC3E-3fpbO8-RUvi2haXcoJr9LVLYtJifGawVRGo,565
|
|
109
109
|
wbhuman_resources/viewsets/titles/kpis.py,sha256=OSH_vIsIjfThWn17X_K7ykBKAFqNvz8M4PyFCF8BRQo,491
|
|
110
110
|
wbhuman_resources/viewsets/titles/review.py,sha256=fL_PqTNAIK7alk_-7RaklkiR9guh54u8oS0m5AWOSSc,2458
|
|
111
|
-
wbhuman_resources-1.
|
|
112
|
-
wbhuman_resources-1.
|
|
113
|
-
wbhuman_resources-1.
|
|
111
|
+
wbhuman_resources-1.60.0.dist-info/METADATA,sha256=vkoi8ToONDp0tsan2puz1HpIRLnroM3azUDxV4pohHw,272
|
|
112
|
+
wbhuman_resources-1.60.0.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
|
|
113
|
+
wbhuman_resources-1.60.0.dist-info/RECORD,,
|
|
File without changes
|