diff --git a/attendance/models.py b/attendance/models.py index fc3e8510f..13eae1a24 100644 --- a/attendance/models.py +++ b/attendance/models.py @@ -237,6 +237,10 @@ class Attendance(models.Model): prev_attendance_approved = False condition = AttendanceValidationCondition.objects.first() + if self.is_validate_request: + self.is_validate_request_approved = False + self.attendance_validated = False + if condition is not None and condition.overtime_cutoff is not None: overtime_cutoff = condition.overtime_cutoff cutoff_seconds = strtime_seconds(overtime_cutoff) diff --git a/attendance/templates/attendance/attendance/attendance_empty.html b/attendance/templates/attendance/attendance/attendance_empty.html index 501d2d02b..0a1b31499 100644 --- a/attendance/templates/attendance/attendance/attendance_empty.html +++ b/attendance/templates/attendance/attendance/attendance_empty.html @@ -1,10 +1,6 @@ -{% extends 'index.html' %} -{% block content %} -{% load static %} -{% load i18n %} -{% load basefilters %} -{% if perms.attendance.add_attendance or request.user|is_reportingmanager %} +{% extends 'index.html' %} {% block content %} {% load static %} {% load i18n %} +{% load basefilters %} {% if perms.attendance.add_attendance or request.user|is_reportingmanager %}
{% trans "Add Attendances" %} -
@@ -32,40 +24,41 @@
-

- {% trans "Attendances" %} -

+

{% trans "Attendances" %}

{% if perms.attendance.add_attendance or request.user|is_reportingmanager%} - + {% endif %}
-
+
-
- Page not found. 404. -
{% trans "There are no attendance records to display." %}
+ Page not found. 404. +
+ {% trans "There are no attendance records to display." %} +
-
-{% endblock content %} \ No newline at end of file +{% endblock content %} diff --git a/attendance/templates/attendance/attendance/attendance_filters.html b/attendance/templates/attendance/attendance/attendance_filters.html index 05e1f7a51..e3b915e93 100644 --- a/attendance/templates/attendance/attendance/attendance_filters.html +++ b/attendance/templates/attendance/attendance/attendance_filters.html @@ -1,165 +1,183 @@ -{% load static %} -{% load i18n %} -
+{% load static %} {% load i18n %} +
-
{% trans "Work Info" %}
-
-
-
-
- - {{f.form.employee_id}} +
{% trans "Work Info" %}
+
+
+
+
+ + {{f.form.employee_id}} +
+
+ + {{f.form.employee_id__employee_work_info__department_id}} +
+
+ + {{f.form.shift_id}} +
+
+ + {{f.form.employee_id__employee_work_info__reporting_manager_id}} +
-
- - {{f.form.employee_id__employee_work_info__department_id}} +
+
+ + {{f.form.employee_id__employee_work_info__company_id}} +
+
+ + {{f.form.employee_id__employee_work_info__job_position_id}} +
+
+ + {{f.form.work_type_id}} +
+
+ + {{f.form.employee_id__employee_work_info__location}} +
-
- - {{f.form.shift_id}} -
-
- - {{f.form.employee_id__employee_work_info__reporting_manager_id}} -
- -
-
-
- - {{f.form.employee_id__employee_work_info__company_id}} +
+
+ {% comment %} {{f.form}} {% endcomment %} +
+
{% trans "Attendance" %}
+
+
+
+
+ + {{f.form.attendance_date}} +
+
+ + {{f.form.attendance_clock_in}} +
+
+ + {{f.form.attendance_validated}} +
-
- - {{f.form.employee_id__employee_work_info__job_position_id}} +
+
+ + {{f.form.minimum_hour}} +
+
+ + {{f.form.attendance_clock_out}} +
+
+ + {{f.form.attendance_overtime_approve}} +
-
- - {{f.form.work_type_id}} +
+
+
+
+
{% trans "Advanced" %}
+
+
+
+
+ + {{f.form.attendance_date__gte}} +
+
+ + {{f.form.attendance_clock_in__gte}} +
+
+ + {{f.form.attendance_clock_out__gte}} +
+
+ + {{f.form.at_work_second__gte}} +
+
+ + {{f.form.overtime_second__gte}} +
-
- - {{f.form.employee_id__employee_work_info__location}} +
+
+ + {{f.form.attendance_date__lte}} +
+
+ + {{f.form.attendance_clock_in__lte}} +
+
+ + {{f.form.attendance_clock_out__lte}} +
+
+ + {{f.form.at_work_second__lte}} +
+
+ + {{f.form.overtime_second__lte}} +
+
+
+
+
+
+
{% trans "Group By" %}
+
+
+
+
+ +
+
+
+
+ +
- {% comment %} {{f.form}} {% endcomment %} -
-
{% trans "Attendance" %}
-
-
-
-
- - {{f.form.attendance_date}} -
-
- - {{f.form.attendance_clock_in}} -
-
- - {{f.form.attendance_validated}} -
-
-
-
- - {{f.form.minimum_hour}} -
-
- - {{f.form.attendance_clock_out}} -
-
- - {{f.form.attendance_overtime_approve}} -
-
-
-
+ -
-
{% trans "Advanced" %}
-
-
-
-
- - {{f.form.attendance_date__gte}} -
-
- - {{f.form.attendance_clock_in__gte}} -
-
- - {{f.form.attendance_clock_out__gte}} -
-
- - {{f.form.at_work_second__gte}} -
-
- - {{f.form.overtime_second__gte}} -
-
-
-
- - {{f.form.attendance_date__lte}} -
-
- - {{f.form.attendance_clock_in__lte}} -
-
- - {{f.form.attendance_clock_out__lte}} -
-
- - {{f.form.at_work_second__lte}} -
-
- - {{f.form.overtime_second__lte}} -
-
-
-
-
-
-
{% trans "Group By" %}
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
- - - \ No newline at end of file + diff --git a/attendance/templates/attendance/attendance/attendance_nav.html b/attendance/templates/attendance/attendance/attendance_nav.html index 6b6b5f5a7..83f80ce0f 100644 --- a/attendance/templates/attendance/attendance/attendance_nav.html +++ b/attendance/templates/attendance/attendance/attendance_nav.html @@ -1,23 +1,23 @@ -{% load static %} {% load i18n %} {% load basefilters %} {% if perms.attendance.add_attendance or request.user|is_reportingmanager %} +{% load static %} {% load i18n %} {% load basefilters %} +{% if perms.attendance.add_attendance or request.user|is_reportingmanager %} +
{% csrf_token %} - -
- - + +
+ + +
+
@@ -222,61 +238,64 @@ >
{% if perms.attendance.add_attendance or request.user|is_reportingmanager%} - + {% endif %}
diff --git a/attendance/templates/attendance/attendance/export_filter.html b/attendance/templates/attendance/attendance/export_filter.html index 3ff6a6125..7f80bd13e 100644 --- a/attendance/templates/attendance/attendance/export_filter.html +++ b/attendance/templates/attendance/attendance/export_filter.html @@ -7,18 +7,19 @@
{% for field in export_form.selected_fields %} -
-
- -
+
+
+
+
{% endfor %}
diff --git a/attendance/views/handle_attendance_errors.py b/attendance/views/handle_attendance_errors.py index 00364c66c..83d72e11e 100644 --- a/attendance/views/handle_attendance_errors.py +++ b/attendance/views/handle_attendance_errors.py @@ -1,3 +1,6 @@ +"""Module for handling attendance error data.""" + + def handle_attendance_errors(error_list): """ Reorganize a list of error dictionaries into a structured error data dictionary @@ -41,14 +44,17 @@ def handle_attendance_errors(error_list): "Error17": [], } for item in error_list: - for key in error_data.keys(): + for key, value in error_data.items(): if key in item: - error_data[key].append(item[key]) + value.append(item[key]) else: - error_data[key].append(None) - for key, value in error_data.items(): - if all(v is None for v in value): - keys_to_remove.append(key) + value.append(None) + + keys_to_remove = [ + key for key, value in error_data.items() if all(v is None for v in value) + ] + for key in keys_to_remove: del error_data[key] - return error_data \ No newline at end of file + + return error_data diff --git a/attendance/views/process_attendance_data.py b/attendance/views/process_attendance_data.py index 9d4ad2acd..12e80411e 100644 --- a/attendance/views/process_attendance_data.py +++ b/attendance/views/process_attendance_data.py @@ -1,12 +1,14 @@ +""" +process_attendance_data.py + +This module contains a function for processing attendance data +from Excel files and saving it to a database. +""" +from datetime import datetime +import pandas as pd +from employee.models import Employee from attendance.models import Attendance from base.models import EmployeeShift, WorkType -from employee.models import Employee - - -import pandas as pd - - -from datetime import datetime def process_attendance_data(attendance_dicts): @@ -166,4 +168,4 @@ def process_attendance_data(attendance_dicts): attendance_data["Error17"] = f"{str(exception)}" error_list.append(attendance_data) - return error_list \ No newline at end of file + return error_list