[ADD] HORILLA API: Add Horilla API into master code base

This commit is contained in:
Horilla
2024-10-10 15:41:46 +05:30
parent f42ac1a391
commit 053964edd9
42 changed files with 7330 additions and 0 deletions

View File

@@ -0,0 +1,398 @@
import django
from django.core.exceptions import ValidationError as DjangoValidationError
from datetime import timezone
from rest_framework import serializers
from rest_framework.serializers import ValidationError
from base.models import Company, Department, EmployeeShift, EmployeeShiftDay, EmployeeShiftSchedule, JobPosition, JobRole, RotatingShift, RotatingShiftAssign, RotatingWorkType, RotatingWorkTypeAssign, ShiftRequest, WorkType, WorkTypeRequest
from employee.models import Actiontype
from employee.models import Employee
from django.http import QueryDict
class CompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = "__all__"
class JobPositionSerializer(serializers.ModelSerializer):
class Meta:
model = JobPosition
fields = "__all__"
class JobRoleSerializer(serializers.ModelSerializer):
class Meta:
model = JobRole
fields = "__all__"
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = "__all__"
def create(self, validated_data):
comapny_id = validated_data.pop('company_id', [])
obj = Department(**validated_data)
obj.save()
obj.company_id.set(comapny_id)
return obj
class WorkTypeSerializer(serializers.ModelSerializer):
class Meta:
model = WorkType
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = WorkType(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class RotatingWorkTypeSerializer(serializers.ModelSerializer):
class Meta:
model = RotatingWorkType
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = RotatingWorkType(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class RotatingWorkTypeAssignSerializer(serializers.ModelSerializer):
rotating_work_type_name = serializers.SerializerMethodField(read_only=True)
current_work_type_name = serializers.SerializerMethodField(read_only=True)
next_work_type_name = serializers.SerializerMethodField(read_only=True)
class Meta:
model = RotatingWorkTypeAssign
fields = '__all__'
def get_current_work_type_name(self, instance):
current_work_type = instance.current_work_type
if current_work_type:
return current_work_type.work_type
else:
return None # Return null if previous_work_type_id doesn't exist
def get_next_work_type_name(self, instance):
next_work_type = instance.next_work_type
if next_work_type:
return next_work_type.work_type
else:
return None # Return null if previous_work_type_id doesn't exist
def get_rotating_work_type_name(self, instance):
rotating_work_type_id = instance.rotating_work_type_id
if rotating_work_type_id:
return rotating_work_type_id.name
else:
return None # Return null if previous_work_type_id doesn't exist
def validate(self, attrs):
if self.instance:
return attrs
# Create an instance of the model with the provided data
instance = RotatingWorkTypeAssign(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
return instance
class EmployeeShiftDaySerializer(serializers.ModelSerializer):
class Meta:
model = EmployeeShiftDay
fields = '__all__'
class EmployeeShiftSerializer(serializers.ModelSerializer):
class Meta:
model = EmployeeShift
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = EmployeeShift(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class EmployeeShiftScheduleSerializer(serializers.ModelSerializer):
class Meta:
model = EmployeeShiftSchedule
fields = '__all__'
class RotatingShiftSerializer(serializers.ModelSerializer):
class Meta:
model = RotatingShift
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = RotatingShift(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class RotatingShiftAssignSerializer(serializers.ModelSerializer):
current_shift_name = serializers.SerializerMethodField(read_only=True)
next_shift_name = serializers.SerializerMethodField(read_only=True)
rotating_shift_name = serializers.SerializerMethodField(read_only=True)
rotate = serializers.CharField(read_only=True)
class Meta:
model = RotatingShiftAssign
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = RotatingShiftAssign(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def to_representation(self, instance):
representation = super().to_representation(instance)
if instance.based_on == 'after':
representation['rotate'] = f"Rotate after {instance.rotate_after_day} days"
elif instance.based_on == 'weekly':
representation['rotate'] = f"Weekly every {instance.rotate_every_weekend}"
elif instance.based_on == 'monthly':
if instance.rotate_every == '1':
representation['rotate'] = f"Rotate every {instance.rotate_every}st day of month"
elif instance.rotate_every == '2':
representation['rotate'] = f"Rotate every {instance.rotate_every}nd day of month"
elif instance.rotate_every == '3':
representation['rotate'] = f"Rotate every {instance.rotate_every}rd day of month"
elif instance.rotate_every == 'last':
representation['rotate'] = "Rotate every last day of month"
else:
representation['rotate'] = f"Rotate every {instance.rotate_every}th day of month"
return representation
def get_rotating_shift_name(self, instance):
rotating_shift_id = instance.rotating_shift_id
if rotating_shift_id:
return rotating_shift_id.name
else:
return None # Return null if previous_work_type_id doesn't exist
def get_next_shift_name(self, instance):
next_shift = instance.next_shift
if next_shift:
return next_shift.employee_shift
else:
return None # Return null if previous_work_type_id doesn't exist
def get_current_shift_name(self, instance):
current_shift = instance.current_shift
if current_shift:
return current_shift.employee_shift
else:
return None # Return null if previous_work_type_id doesn't exist
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class WorkTypeRequestSerializer(serializers.ModelSerializer):
employee_first_name = serializers.CharField(
source='employee_id.employee_first_name', read_only=True)
employee_last_name = serializers.CharField(
source='employee_id.employee_last_name', read_only=True)
work_type_name = serializers.CharField(
source='work_type_id.work_type', read_only=True)
previous_work_type_name = serializers.SerializerMethodField(read_only=True)
class Meta:
model = WorkTypeRequest
fields = '__all__'
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = WorkTypeRequest(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def get_previous_work_type_name(self, instance):
previous_work_type = instance.previous_work_type_id
if previous_work_type:
return previous_work_type.work_type
else:
return None # Return null if previous_work_type_id doesn't exist
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class ShiftRequestSerializer(serializers.ModelSerializer):
employee_first_name = serializers.CharField(
source='employee_id.employee_first_name', read_only=True)
employee_last_name = serializers.CharField(
source='employee_id.employee_last_name', read_only=True)
shift_name = serializers.SerializerMethodField(read_only=True)
previous_shift_name = serializers.SerializerMethodField(read_only=True)
def get_previous_shift_name(self, instance):
previous_shift_id = instance.previous_shift_id
if previous_shift_id:
return previous_shift_id.employee_shift
else:
return None # Re
def get_shift_name(self, instance):
shift_id = instance.shift_id
if shift_id:
return shift_id.employee_shift
else:
return None # Re
def validate(self, attrs):
# Create an instance of the model with the provided data
instance = ShiftRequest(**attrs)
# Call the model's clean method for validation
try:
instance.clean()
except DjangoValidationError as e:
# Raise DRF's ValidationError with the same message
raise serializers.ValidationError(e)
return attrs
def create(self, validated_data):
return super().create(validated_data)
def update(self, instance, validated_data):
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.clean() # Call clean method before saving the instance
instance.save()
return instance
class Meta:
model = ShiftRequest
fields = '__all__'
class ActiontypeSerializer(serializers.ModelSerializer):
class Meta:
model = Actiontype
fields = ['id', 'title', 'action_type']