399 lines
13 KiB
Python
399 lines
13 KiB
Python
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']
|