Виды отпусков работников условия в рамках отдыха DJango
Я работаю над приложением Hrms на фреймворке django rest. Я создал модуль данных о сотрудниках, теперь следующая часть - система управления отпусками. На самом деле в политике моей компании есть различные политики отпусков, такие как cl, sl, ml, compo off, и разрешения. Я не могу понять, как сделать логику для этого и не знаю, где писать логику в сериализаторах или представлениях? Так как я новичок, я нахожу это несколько сложным. Также, когда сотрудник подает заявление на отпуск, оно должно быть запрошено в T.L. и затем должно быть видно отделу кадров и менеджеру. T.L. дает разрешение, и все это должно быть в заявлении, а также в процессе электронной почты. Как сделать запрос и одобрение в rest api, а также как отправить почту, используя django rest api? Кто-нибудь может мне подсказать. Если сотрудник выбирает Cl, у него всего 12 Cl и он может использовать ежемесячно один раз и cl может перенести до 3 отпусков, после чего он истечет, затем sl означает ежеквартальные 2 доступных, затем отпуска на полдня, какова будет логика здесь и как я должен продвигаться?
class LeaveType(models.Model):
Leave_type = (
('CL', 'Casual Leave'),
('SL', 'Sick Leave'),
('ML', 'Medical Leave'),
('Comp Off', 'Compensation'),
('L.O.P', 'Loss of Pay')
)
Leave_Choice = (
('Full Day', 'Full Day Leave'),
('Fore Noon', 'Fore Noon Only'),
('After Noon', 'After Noon Only'),
Status_choices = (
('Approved', 'Approved'),
('Rejected', 'Rejected'),
('Pending', 'Pending'),
leave_type = models.CharField(max_length=50, choices=Leave_type)
status = models.CharField(max_length=50, choices=Status_choices, default='Pending')
leave_choice = models.CharField(max_length=50, choices=Leave_Choice, default='Full Day')
if leave_type == 'CL':
total_leave_per_year = 12
monthly_leave_applicable = 1
carry_forawrd_monthly_leave = 3
elif leave_type == 'SL':
Quarterly_days_applicable = 2
annual_leave_applicable = 8
Сделайте отдельное приложение для отпусков, связанное как поле внешнего ключа с основным сотрудником. Затем объявите модели отпусков и перейдите к условиям в сериализаторе, чтобы разрешить или не разрешить сотруднику подать заявление на отпуск. С помощью разрешений вы можете контролировать только чтение или чтение/запись части представления. Для отправки электронной почты посмотрите документацию: https://docs.djangoproject.com/en/4.1/topics/email/
Если вам нужна логика, вот как вы можете действовать
Сделайте свой первый API, где пользователь просит об отпуске, позволяет создать новую запись в базе данных и статус должен быть ожидающим, также вы должны позволить назначить некоторый тип пользователя, как Team lead или hr, чтобы быть упомянутым.
Итак, сначала наш код будет выглядеть так
Вам понадобится пользователь как внешний ключ в вашей таблице.
LeaveType.objects.create(leave_type="Full_day",status="pending", leave_choice="Cl", assogned_to="some user from foreign key")
Теперь о втором шаге В нашем случае, когда отпуск может быть виден только некоторым определенным людям.
Для этого вам нужно обратить внимание на права доступа django Предположим, что в вашей системе есть 3 типа пользователей, таких как HR, Team Lead и Project Manager в вашей модели пользователя.
Так что вам нужно написать свой собственный класс permissons .
Вы можете сделать это следующим образом из rest_framework import permissions
class CanViewLeavePermission(permissions.BasePermission):
def has_permission(self, request, view):
# check if user is team lead or not
return bool(request.user.is_team_lead)
Теперь мы можем включить наш вышеупомянутый класс вместе со списком классов разрешений в наше представление
class UpdateLeaveRequestView(UpdateAPIView):
permisson_class =[IsAuthenticated,CanViewLeavePermission]
После этого вам нужен только идентификатор пользователя, то есть мы создадим логику для обновления нашего api, поскольку идентификатор будет взят как slug из url, и мы можем просто запросить модель LeaveType
с первичным ключом из url и отправить электронное письмо, обновить статус и назначить следующему человеку, а также позволить некоторый уровень проверки, если ожидающий отпуск уже обновлен.
Надеюсь, вы поняли!