From d09e9b49462e94096995d7e8c6fbcbc25717c3c2 Mon Sep 17 00:00:00 2001 From: Horilla <131998600+horilla-opensource@users.noreply.github.com> Date: Thu, 21 Mar 2024 08:38:16 +0000 Subject: [PATCH] Development (#128) * [UPDT] RECRUITMENT: Updated recruitment stage update method by changing hx-target * [UPDT] LEAVE: Updated company leave create , update and delete method by adding hx-target * [UPDT] ATTENDANCE: Updated attendance request create method by changing hx-target * [UPDT] LEAVE: Updated leave request create form hx-target * [IMP] Add HorillaModel abstract model * [UPDT] EMPLOYEE: Updated employee disciplinary form by adding parent model class for disciplinary model --- .../templates/requests/attendance/nav.html | 27 +- .../requests/attendance/request_new_form.html | 105 +++-- .../requests/attendance/requests_empty.html | 27 +- employee/forms.py | 10 +- employee/models.py | 5 +- employee/policies.py | 2 +- employee/views.py | 4 +- horilla/models.py | 22 + .../leave/company_leave/company-leave.html | 90 ---- .../leave/company_leave/company_leave.html | 45 +- .../company_leave_creation_form.html | 50 ++- .../company_leave_update_form.html | 56 ++- .../company_leave/company_leave_view.html | 69 +-- leave/templates/leave/holiday/holiday.html | 419 ++++++++++-------- .../templates/leave/holiday/holiday_form.html | 2 +- .../leave/holiday/holiday_update_form.html | 2 +- .../templates/leave/holiday/holiday_view.html | 215 ++++----- .../leave/leave_request/request_view.html | 22 - .../templates/leave/user_leave/group_by.html | 4 +- .../leave/user_leave/user_request_update.html | 2 +- .../leave/user_leave/user_request_view.html | 25 -- .../leave/user_leave/user_requests.html | 4 +- .../templates/leave/user_request_update.html | 53 --- leave/templates/leave/user_request_view.html | 2 +- leave/templates/leave/user_requests.html | 119 ----- leave/views.py | 3 +- .../templates/pipeline/footer_components.html | 25 +- .../templates/pipeline/form/stage_update.html | 86 ++-- recruitment/templates/pipeline/pipeline.html | 4 +- .../templates/pipeline/pipeline_card.html | 2 +- .../templates/stage/stage_component.html | 26 +- .../templates/stage/stage_update_form.html | 108 ++--- templates/dashboard.html | 4 +- templates/quick_access.html | 37 -- 34 files changed, 639 insertions(+), 1037 deletions(-) create mode 100644 horilla/models.py delete mode 100644 leave/templates/leave/company_leave/company-leave.html delete mode 100644 leave/templates/leave/user_request_update.html delete mode 100644 leave/templates/leave/user_requests.html diff --git a/attendance/templates/requests/attendance/nav.html b/attendance/templates/requests/attendance/nav.html index 769329e61..fbbda30ae 100644 --- a/attendance/templates/requests/attendance/nav.html +++ b/attendance/templates/requests/attendance/nav.html @@ -34,29 +34,6 @@ - -
{% trans "Create" %} diff --git a/attendance/templates/requests/attendance/request_new_form.html b/attendance/templates/requests/attendance/request_new_form.html index 9d861caf1..879ca8c27 100644 --- a/attendance/templates/requests/attendance/request_new_form.html +++ b/attendance/templates/requests/attendance/request_new_form.html @@ -1,57 +1,66 @@ {% load i18n %}{% load widget_tweaks %} {% load attendancefilters %} +
+

+ {% trans "New Attendances Request" %} +

+ +
+
+
+
+ {% csrf_token %} +
+
+
{{form.non_field_errors}}
-
- - {% csrf_token %} -
-
-
{{form.non_field_errors}}
- - {{form.non_field_errors}} - {% for field in form.visible_fields %} - {% if field.field.widget|is_select_multiple or field.field.widget|is_text_area %} - -
- - {{ field|add_class:"form-control" }} -
- - {% else %} -
+ {{form.non_field_errors}} + {% for field in form.visible_fields %} + {% if field.field.widget|is_select_multiple or field.field.widget|is_text_area %} - {% if field.field.widget.input_type == "checkbox" %} -
- {{ field|add_class:"oh-switch__checkbox" }} + class="oh-label" + for="id_{{ field.name }}" + title="{{ field.help_text|safe }}" + >{{ field.label }} +
+ + {{ field|add_class:"form-control" }} +
+ + {% else %} +
+ + {% if field.field.widget.input_type == "checkbox" %} +
+ {{ field|add_class:"oh-switch__checkbox" }} + +
+ {% else %} + {{ field|add_class:"form-control" }} + {% endif %} + {{field.errors}} +
+ {% endif %} + {% endfor %} -
- {% else %} - {{ field|add_class:"form-control" }} - {% endif %} - {{field.errors}}
- {% endif %} - {% endfor %} -
- -
- - +
+ + +
diff --git a/attendance/templates/requests/attendance/requests_empty.html b/attendance/templates/requests/attendance/requests_empty.html index 284b81a03..056a963ff 100644 --- a/attendance/templates/requests/attendance/requests_empty.html +++ b/attendance/templates/requests/attendance/requests_empty.html @@ -35,29 +35,6 @@
- -
{% trans "New Request" %} diff --git a/employee/forms.py b/employee/forms.py index 148c3e710..608e383e5 100644 --- a/employee/forms.py +++ b/employee/forms.py @@ -111,6 +111,14 @@ class ModelForm(forms.ModelForm): except: pass + def save(self, request=None, *args, **kwargs): + if request: + instance = super().save(commit=False) + instance.save(request=request, *args, **kwargs) + else: + instance.save(*args, **kwargs) + return super().save(*args, **kwargs) + class UserForm(ModelForm): """ @@ -610,7 +618,7 @@ class DisciplinaryActionForm(ModelForm): class Meta: model = DisciplinaryAction fields = "__all__" - exclude = ["company_id", "objects"] + exclude = ["company_id", "objects", "is_active"] widgets = { "start_date": forms.DateInput(attrs={"type": "date"}), } diff --git a/employee/models.py b/employee/models.py index 37a3f31ec..5ad1ef319 100644 --- a/employee/models.py +++ b/employee/models.py @@ -16,6 +16,7 @@ from django.utils.translation import gettext as _ from django.core.exceptions import ValidationError from django.core.files.storage import default_storage from base import thread_local_middleware +from horilla.models import HorillaModel from horilla_audit.models import HorillaAuditLog, HorillaAuditInfo from horilla_audit.methods import get_diff from base.models import ( @@ -786,7 +787,7 @@ class Actiontype(models.Model): return f"{self.title}" -class DisciplinaryAction(models.Model): +class DisciplinaryAction(HorillaModel): """ Disciplinary model """ @@ -796,7 +797,7 @@ class DisciplinaryAction(models.Model): action = models.ForeignKey(Actiontype, on_delete=models.CASCADE) description = models.TextField(max_length=255) unit_in = models.CharField(max_length=10, choices=choices, default="days") - days = models.IntegerField(null=True, default=2) + days = models.IntegerField(null=True, default=1) hours = models.CharField( max_length=6, default="00:00", diff --git a/employee/policies.py b/employee/policies.py index 5dd3047a7..89b2ea589 100644 --- a/employee/policies.py +++ b/employee/policies.py @@ -258,7 +258,7 @@ def create_actions(request): user = employee.employee_user_id employees.append(user) - form.save() + form.save(request=request) messages.success(request, _("Disciplinary action taken.")) notify.send( request.user.employee_get, diff --git a/employee/views.py b/employee/views.py index ec3a0f0fd..e4ea229f6 100755 --- a/employee/views.py +++ b/employee/views.py @@ -2971,7 +2971,7 @@ def employee_select(request): This method is used to return all the id of the employees to select the employee row """ page_number = request.GET.get("page") - employees = Employee.objects.all() + employees = Employee.objects.filter() if page_number == "all": employees = Employee.objects.filter(is_active=True) @@ -2991,7 +2991,7 @@ def employee_select_filter(request): """ page_number = request.GET.get("page") if page_number == "all": - employee_filter = EmployeeFilter(request.GET, queryset=Employee.objects.all()) + employee_filter = EmployeeFilter(request.GET, queryset=Employee.objects.filter()) # Get the filtered queryset filtered_employees = filtersubordinatesemployeemodel( diff --git a/horilla/models.py b/horilla/models.py new file mode 100644 index 000000000..f5e69b3cd --- /dev/null +++ b/horilla/models.py @@ -0,0 +1,22 @@ +from django.db import models +from django.contrib.auth.models import User + + +class HorillaModel(models.Model): + created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True) + created_by = models.ForeignKey( + User, on_delete=models.SET_NULL, null=True, blank=True, editable=False + ) + is_active = models.BooleanField(default=True) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + request = kwargs.get("request", None) + if request and not self.pk: + user = request.user + if user.is_authenticated: + self.created_by = user + request = kwargs.pop("request", None) + super(HorillaModel, self).save(*args, **kwargs) diff --git a/leave/templates/leave/company_leave/company-leave.html b/leave/templates/leave/company_leave/company-leave.html deleted file mode 100644 index d28fa9ba2..000000000 --- a/leave/templates/leave/company_leave/company-leave.html +++ /dev/null @@ -1,90 +0,0 @@ -{% load i18n %} -{% include 'filter_tags.html' %} -
-
-
-
-
{% trans "Based On Week" %}
-
{% trans "Based On Week Day" %}
-
{% trans "Actions" %}
-
-
-
- {% for company_leave in company_leaves %} -
-
- {% if company_leave.based_on_week != None %} - {% for week in weeks %} - {% if week.0 == company_leave.based_on_week %} - {{week.1}} - {% endif %} - {% endfor %} - {% else %} - {% trans "All" %} - {% endif %} -
-
- {% for week_day in week_days %} - {% if week_day.0 == company_leave.based_on_week_day %} - {{week_day.1}} - {% endif %} - {% endfor %} -
- -
-
- - -
-
-
- {% endfor %} - -
-
-
- -
- - {% trans "Page" %} {{ company_leaves.number }} {% trans "of" %} {{ company_leaves.paginator.num_pages }}. - - -
\ No newline at end of file diff --git a/leave/templates/leave/company_leave/company_leave.html b/leave/templates/leave/company_leave/company_leave.html index a159041ee..93fe71108 100644 --- a/leave/templates/leave/company_leave/company_leave.html +++ b/leave/templates/leave/company_leave/company_leave.html @@ -1,5 +1,17 @@ -{% load i18n %} +{% load i18n %} {% load static %} +{% if messages %} +
+ {% for message in messages %} +
+
+ {{ message }} +
+
+ {% endfor %} +
+{% endif %} {% include 'filter_tags.html' %} +{% if company_leaves %}
@@ -38,14 +50,16 @@
{% if perms.leave.change_companyleave %} + data-target="#objectUpdateModal" hx-get="{% url 'company-leave-update' company_leave.id %}" + hx-target="#objectUpdateModalTarget"> {% endif %} {% if perms.leave.delete_companyleave %} - + + {% endif %}
@@ -95,4 +109,19 @@ -
\ No newline at end of file +
+ +{% else %} +
+
+ +

{% trans "There are no company leaves at the moment." %}

+
+
+{% endif %} \ No newline at end of file diff --git a/leave/templates/leave/company_leave/company_leave_creation_form.html b/leave/templates/leave/company_leave/company_leave_creation_form.html index 0976a7254..2e37adeec 100644 --- a/leave/templates/leave/company_leave/company_leave_creation_form.html +++ b/leave/templates/leave/company_leave/company_leave_creation_form.html @@ -1,26 +1,36 @@ {% load i18n %} {% if form.errors %} -
-
- {% for error in form.non_field_errors %} -
{{ error }}
- {% endfor %} -
+
+ {% for error in form.non_field_errors %} +
{{ error }}
+ {% endfor %} +
{% endif %} -
-
- - {{form.based_on_week}} {{form.based_on_week.errors}} -
-
- - {{form.based_on_week_day}} {{form.based_on_week_day.errors}} -
- +
+ {% trans "Create Company Leaves" %} + +
+ +
+ + {{form.based_on_week}} {{form.based_on_week.errors}} +
+
+ + {{form.based_on_week_day}} {{form.based_on_week_day.errors}} +
+
diff --git a/leave/templates/leave/company_leave/company_leave_update_form.html b/leave/templates/leave/company_leave/company_leave_update_form.html index 1d98a3d1b..5bf75afac 100644 --- a/leave/templates/leave/company_leave/company_leave_update_form.html +++ b/leave/templates/leave/company_leave/company_leave_update_form.html @@ -1,26 +1,36 @@ -{% load i18n %} -{% if form.errors %} +{% load i18n %} {% if form.errors %} -
-
- {% for error in form.non_field_errors %} -
{{ error }}
- {% endfor %} -
-
+
+
+ {% for error in form.non_field_errors %} +
{{ error }}
+ {% endfor %} +
+
{% endif %} -
-
- - {{form.based_on_week}} -
-
- - {{form.based_on_week_day}} -
- +
+ {% trans "Update Company Leaves" %} + +
+ +
+ + {{form.based_on_week}} +
+
+ + {{form.based_on_week_day}} +
+
diff --git a/leave/templates/leave/company_leave/company_leave_view.html b/leave/templates/leave/company_leave/company_leave_view.html index 02fdf89ce..740d8fe5a 100644 --- a/leave/templates/leave/company_leave/company_leave_view.html +++ b/leave/templates/leave/company_leave/company_leave_view.html @@ -59,8 +59,8 @@
@@ -74,49 +74,12 @@
- {% if company_leaves %} - {% include 'leave/company_leave/company_leave.html' %} - {% else %} -
-
- -

{% trans "There are no company leaves at the moment." %}

-
-
- {% endif %} + {% include 'leave/company_leave/company_leave.html' %}
- - - -
- diff --git a/leave/templates/leave/holiday/holiday.html b/leave/templates/leave/holiday/holiday.html index 2d0fa010c..fe03e367d 100644 --- a/leave/templates/leave/holiday/holiday.html +++ b/leave/templates/leave/holiday/holiday.html @@ -1,209 +1,234 @@ -{% load i18n %} {% load static %} {% include 'filter_tags.html' %} +{% load i18n %} {% load static %} {% include 'filter_tags.html' %} {% if messages %} -
- {% for message in messages %} -
-
- {{ message }} +
+ {% for message in messages %} +
+
+ {{ message }} +
+
+ {% endfor %} +
+{% endif %} +{% if holidays %} + +{% if perms.leave.add_holiday %} +
+ {% trans "Select All Holidays" %} +
+ + + +{% endif %} + +
+
+
+
+
+
+ +
+
+
+ {% trans "Holiday Name" %} +
+
+ {% trans "Start Date" %} +
+
+ {% trans "End Date" %} +
+
{% trans "Recurring" %}
+ {% if perms.leave.change_holiday or perms.leave.delete_holiday %} +
{% trans "Actions" %}
+ {% endif %} +
+
+
+ {% for holiday in holidays %} +
+
+
+ +
+
+
{{holiday.name}}
+
+ {{holiday.start_date}} +
+
+ {{holiday.end_date}} +
+
+ {% if holiday.recurring %} + {% trans "Yes" %} + {% else %} + {% trans "No"%} + {% endif %} +
+ {% if perms.leave.change_holiday or perms.leave.delete_holiday %} +
+
+ {% if perms.leave.change_holiday %} + + {% endif %} {% if perms.leave.delete_holiday %} + + + + {% endif %} +
+
+ {% endif %} +
+ {% endfor %}
- {% endfor %} -{% endif %}
-{% if holidays %} - - {% if perms.leave.add_holiday %} -
- {% trans "Select All Holidays" %} -
- - - - {% endif %} - -
-
-
-
-
-
- -
-
-
{% trans "Holiday Name" %}
-
{% trans "Start Date" %}
-
{% trans "End Date" %}
-
{% trans "Recurring" %}
- {% if perms.leave.change_holiday or perms.leave.delete_holiday %} -
{% trans "Actions" %}
- {% endif %} -
-
-
- {% for holiday in holidays %} -
-
-
- -
-
-
{{holiday.name}}
-
{{holiday.start_date}}
-
{{holiday.end_date}}
-
- {% if holiday.recurring %} - {% trans "Yes" %} - {% else %} - {% trans "No"%} - {% endif %} -
- {% if perms.leave.change_holiday or perms.leave.delete_holiday %} -
- -
- {% if perms.leave.change_holiday %} - - {% endif %} - {% if perms.leave.delete_holiday %} - - - - {% endif %} -
-
- {% endif %} -
- {% endfor %} -
-
-
-
- - {% trans "Page" %} {{ holidays.number }} {% trans "of" %} {{ holidays.paginator.num_pages }}. - - +
+ + {% trans "Page" %} {{ holidays.number }} {% trans "of" %} {{ holidays.paginator.num_pages }}. + + +
{% else %} - -
-
- -

- {% trans "There are no holidays at the moments." %} -

-
-
- + +
+
+ +

+ {% trans "There are no holidays at the moments." %} +

+
+
+ {% endif %} - diff --git a/leave/templates/leave/leave_request/request_view.html b/leave/templates/leave/leave_request/request_view.html index ae1584ccd..d45d069d7 100644 --- a/leave/templates/leave/leave_request/request_view.html +++ b/leave/templates/leave/leave_request/request_view.html @@ -239,29 +239,7 @@
- - - -
- - - - - - -
-
-
- - {% for error in form.non_field_errors %} -
- {{ error }} -
- {% endfor %} -
-
-{% endif %} - -
-
- - {{form.start_date}} - {{form.start_date.errors}} -
-
- - {{form.start_date_breakdown}} - {{form.start_date_breakdown.errors}} -
-
- - {{form.end_date}} - {{form.end_date.errors}} -
-
- - {{form.end_date_breakdown}} - {{form.end_date_breakdown.errors}} -
-
- - {{form.description}} - {{form.description.errors}} -
-
- - {{form.attachment}} - {{form.attachment.errors}} -
- -
\ No newline at end of file diff --git a/leave/templates/leave/user_request_view.html b/leave/templates/leave/user_request_view.html index 9d75ddcaf..9ace5a064 100644 --- a/leave/templates/leave/user_request_view.html +++ b/leave/templates/leave/user_request_view.html @@ -108,7 +108,7 @@
{% if leave_requests %} - {% include 'leave/user_requests.html' %} + {% include 'leave/user_leave/user_requests.html' %} {% else %}
diff --git a/leave/templates/leave/user_requests.html b/leave/templates/leave/user_requests.html deleted file mode 100644 index 6fbc30a32..000000000 --- a/leave/templates/leave/user_requests.html +++ /dev/null @@ -1,119 +0,0 @@ -{% load i18n %} -{% if messages %} -
- {% for message in messages %} -
-
- {{ message }} -
-
- {% endfor %} -
-{% endif %} -{% include 'filter_tags.html' %} - -
- - - {% trans "Cancelled" %} - - - - {% trans "Requested" %} - - - - {% trans "Approved" %} - -
- -
- - diff --git a/leave/views.py b/leave/views.py index be8ba246c..0c0bf63b8 100644 --- a/leave/views.py +++ b/leave/views.py @@ -1702,6 +1702,7 @@ def company_leave_delete(request, id): GET : return company leave creation form template POST : return company leave view template """ + query_string = request.GET.urlencode() try: CompanyLeave.objects.get(id=id).delete() messages.success(request, _("Company leave deleted successfully..")) @@ -1709,7 +1710,7 @@ def company_leave_delete(request, id): messages.error(request, _("Company leave not found.")) except ProtectedError: messages.error(request, _("Related entries exists")) - return redirect(company_leave_view) + return redirect(f"/leave/company-leave-filter?{query_string}") @login_required diff --git a/recruitment/templates/pipeline/footer_components.html b/recruitment/templates/pipeline/footer_components.html index fa95e5cd1..298f24def 100644 --- a/recruitment/templates/pipeline/footer_components.html +++ b/recruitment/templates/pipeline/footer_components.html @@ -49,30 +49,7 @@
- - - - +