diff --git a/base/admin.py b/base/admin.py index 07bd52454..c36fdd7b3 100644 --- a/base/admin.py +++ b/base/admin.py @@ -17,6 +17,7 @@ from base.models import ( EmployeeShiftDay, EmployeeType, MultipleApprovalManagers, + ShiftrequestComment, Tags, WorkType, RotatingWorkType, @@ -25,6 +26,7 @@ from base.models import ( RotatingShiftAssign, ShiftRequest, WorkTypeRequest, + WorktyperequestComment, ) # Register your models here. @@ -47,3 +49,5 @@ admin.site.register(WorkTypeRequest) admin.site.register(Tags) admin.site.register(DynamicEmailConfiguration) admin.site.register(MultipleApprovalManagers) +admin.site.register(ShiftrequestComment) +admin.site.register(WorktyperequestComment) diff --git a/base/forms.py b/base/forms.py index 8ce663939..84d355b5e 100644 --- a/base/forms.py +++ b/base/forms.py @@ -25,6 +25,7 @@ from base.models import ( JobPosition, JobRole, MultipleApprovalCondition, + ShiftrequestComment, WorkType, EmployeeType, EmployeeShift, @@ -37,6 +38,7 @@ from base.models import ( ShiftRequest, EmployeeShiftDay, Tags, + WorktyperequestComment, ) from base.methods import reload_queryset from horilla_audit.models import AuditTag @@ -1530,6 +1532,33 @@ class AuditTagForm(ModelForm): fields = "__all__" +class ShiftrequestcommentForm(ModelForm): + """ + Audit Tags form + """ + + class Meta: + """ + Meta class for additional options + """ + + model = ShiftrequestComment + fields = ('comment',) + + +class WorktyperequestcommentForm(ModelForm): + """ + Audit Tags form + """ + + class Meta: + """ + Meta class for additional options + """ + + model = WorktyperequestComment + fields = ('comment',) + class DynamicMailConfForm(ModelForm): """ diff --git a/base/methods.py b/base/methods.py index 778c1a270..789966c2a 100644 --- a/base/methods.py +++ b/base/methods.py @@ -31,6 +31,17 @@ def filtersubordinates(request, queryset, perm=None): return queryset +def filter_own_recodes(request, queryset, perm=None): + """ + This method is used to filter out subordinates queryset element. + """ + user = request.user + if user.has_perm(perm): + return queryset + queryset = queryset.filter(employee_id=request.user.employee_get) + return queryset + + def filtersubordinatesemployeemodel(request, queryset, perm=None): """ This method is used to filter out subordinates queryset element. @@ -547,18 +558,22 @@ def generate_pdf(template_path, context, path=True, title=None): return response return None + def filter_conditional_leave_request(request): approval_manager = Employee.objects.filter(employee_user_id=request.user).first() - leave_request_ids = [] - multiple_approval_requests = LeaveRequestConditionApproval.objects.filter(manager_id=approval_manager) + leave_request_ids = [] + multiple_approval_requests = LeaveRequestConditionApproval.objects.filter( + manager_id=approval_manager + ) for instance in multiple_approval_requests: if instance.sequence > 1: pre_sequence = instance.sequence - 1 leave_request_id = instance.leave_request_id - instance = LeaveRequestConditionApproval.objects.filter(leave_request_id = leave_request_id,sequence = pre_sequence).first() + instance = LeaveRequestConditionApproval.objects.filter( + leave_request_id=leave_request_id, sequence=pre_sequence + ).first() if instance.is_approved: - leave_request_ids.append(instance.leave_request_id.id) + leave_request_ids.append(instance.leave_request_id.id) else: - leave_request_ids.append(instance.leave_request_id.id) + leave_request_ids.append(instance.leave_request_id.id) return LeaveRequest.objects.filter(pk__in=leave_request_ids) - diff --git a/base/models.py b/base/models.py index 8c7a93971..5fab75de0 100644 --- a/base/models.py +++ b/base/models.py @@ -730,6 +730,26 @@ class WorkTypeRequest(models.Model): ) +class WorktyperequestComment(models.Model): + """ + WorktyperequestComment Model + """ + from employee.models import Employee + + request_id = models.ForeignKey(WorkTypeRequest, on_delete=models.CASCADE) + employee_id = models.ForeignKey(Employee, on_delete=models.CASCADE) + comment = models.TextField(null=True, verbose_name=_("Comment")) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name=_("Created At"), + null=True, + ) + + def __str__(self) -> str: + return f"{self.comment}" + + + class ShiftRequest(models.Model): """ ShiftRequest model @@ -845,6 +865,27 @@ class ShiftRequest(models.Model): return f"{self.employee_id}" + +class ShiftrequestComment(models.Model): + """ + ShiftrequestComment Model + """ + from employee.models import Employee + + request_id = models.ForeignKey(ShiftRequest, on_delete=models.CASCADE) + employee_id = models.ForeignKey(Employee, on_delete=models.CASCADE) + comment = models.TextField(null=True, verbose_name=_("Comment")) + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name=_("Created At"), + null=True, + ) + + def __str__(self) -> str: + return f"{self.comment}" + + + class Tags(models.Model): title = models.CharField(max_length=30) color = models.CharField(max_length=30) @@ -976,7 +1017,7 @@ class MultipleApprovalCondition(models.Model): ) def __str__(self) -> str: - return f"{self.department} {self.condition_field} {self.condition_operator}" + return f"{self.condition_field} {self.condition_operator}" def clean(self, *args, **kwargs): if self.condition_value: @@ -985,7 +1026,7 @@ class MultipleApprovalCondition(models.Model): condition_field=self.condition_field, condition_operator=self.condition_operator, condition_value=self.condition_value, - ) + ).exclude(id=self.pk) if instance: raise ValidationError( _("A condition with the provided fields already exists") @@ -1058,21 +1099,29 @@ class MultipleApprovalCondition(models.Model): ) super().clean(*args, **kwargs) + def save(self, *args, **kwargs): + if self.condition_operator != "range": + self.condition_start_value = None + self.condition_end_value = None + else: + self.condition_value = None + super().save(*args, **kwargs) + def approval_managers(self, *args, **kwargs): managers = [] from employee.models import Employee - queryset = MultipleApprovalManagers.objects.filter(condition_id=self.pk).order_by('sequence') + + queryset = MultipleApprovalManagers.objects.filter( + condition_id=self.pk + ).order_by("sequence") for query in queryset: - employee = Employee.objects.get(id = query.employee_id) + employee = Employee.objects.get(id=query.employee_id) managers.append(employee) - + return managers - - class MultipleApprovalManagers(models.Model): - condition_id = models.ForeignKey( MultipleApprovalCondition, on_delete=models.CASCADE ) diff --git a/base/urls.py b/base/urls.py index 0fa00d9e6..8864352e0 100644 --- a/base/urls.py +++ b/base/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from base import views +from base import request_and_approve, views from base.models import ( Company, Department, @@ -602,7 +602,7 @@ urlpatterns = [ "audit-tag-delete/",views.audit_tag_delete,name="audit-tag-delete" ), path( - "multiple-approval-condition", + "configuration/multiple-approval-condition", views.multiple_approval_condition, name="multiple-approval-condition", ), @@ -621,6 +621,46 @@ urlpatterns = [ views.multiple_level_approval_delete, name="multiple-level-approval-delete", ), + path( + "shift-request-add-comment//", + views.create_shiftrequest_comment, + name="shift-request-add-comment", + ), + path( + "shift-request-view-comment//", + views.view_shiftrequest_comment, + name="shift-request-view-comment", + ), + path( + "shift-request-delete-comment//", + views.delete_shiftrequest_comment, + name="shift-request-delete-comment", + ), + path( + "worktype-request-add-comment//", + views.create_worktyperequest_comment, + name="worktype-request-add-comment", + ), + path( + "worktype-request-view-comment//", + views.view_worktyperequest_comment, + name="worktype-request-view-comment", + ), + path( + "worktype-request-delete-comment//", + views.delete_worktyperequest_comment, + name="worktype-request-delete-comment", + ), + path( + "dashboard-shift-request", + request_and_approve.dashboard_shift_request, + name="dashboard-shift-request", + ), + path( + "dashboard-work-type-request", + request_and_approve.dashboard_work_type_request, + name="dashboard-work-type-request", + ), ]