[UPDT] ATTENDANCE: Updated attendance export method by adding htmx for filter attendance datas to export

This commit is contained in:
Horilla
2024-04-23 14:44:11 +05:30
parent d1670e90a9
commit 8c985740d1
4 changed files with 207 additions and 190 deletions

View File

@@ -134,35 +134,8 @@
role="dialog"
aria-labelledby="attendanceExport"
aria-hidden="true"
>
<div class="oh-modal__dialog">
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title" id="attendanceExportLavel">
{% trans "Export Attendances" %}
</h2>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
<div
class="oh-modal__dialog-body p-0 pt-2"
id="attendanceExportModalBody"
>
<form
action="{%url 'attendance-info-export' %}"
method="get"
onsubmit="event.stopPropagation();$(this).parents().find('.oh-modal--show').last().toggleClass('oh-modal--show');"
id="attendanceExportForm"
>
{% csrf_token %} {% include 'attendance/attendance/export_filter.html'%}
<div class="oh-dropdown__filter-footer">
<button class="oh-btn oh-btn--secondary oh-btn--small w-100">
{% trans "Export" %}
</button>
</div>
</form>
</div>
</div>
</div>
>
<div class="oh-modal__dialog" id="attendanceExportModalBody"></div>
</div>
{% endif %}
@@ -291,7 +264,7 @@
}
</script> {% endcomment %}
</form>
<div class="oh-dropdown ml-2" x-data="{open: false}">
<div class="oh-dropdown ml-2" x-data="{open: false}" on>
<button
onclick="event.stopPropagation();event.preventDefault()"
class="oh-btn oh-btn--dropdown"
@@ -324,6 +297,8 @@
id="attendance-info-export"
data-toggle="oh-modal-toggle"
data-target="#attendanceExport"
hx-get="{% url 'attendance-info-export-form' %}"
hx-target="#attendanceExportModalBody"
>{% trans "Export" %}</a
>
</li>

View File

@@ -1,159 +1,187 @@
{% load static %} {% load i18n %}
<div class="oh-dropdown__filter-body" id="export_attendance_form">
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Excel columns" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">
<input type="checkbox" id="select-all-fields" /> {% trans "Select All" %}
</label>
</div>
</div>
</div>
<div class="row">
{% for field in export_form.selected_fields %}
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label"> {{ field }} </label>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Work Info" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Employee" %}</label>
{{export.form.employee_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Department" %}</label>
{{export.form.employee_id__employee_work_info__department_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Shift" %}</label>
{{export.form.shift_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Reporting Manager" %}</label>
{{export.form.employee_id__employee_work_info__reporting_manager_id}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Company" %}</label>
{{export.form.employee_id__employee_work_info__company_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Job Position" %}</label>
{{export.form.employee_id__employee_work_info__job_position_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Work Type" %}</label>
{{export.form.work_type_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Work Location" %}</label>
{{export.form.employee_id__employee_work_info__location}}
</div>
</div>
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Attendance" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance Date" %}</label>
{{export.form.attendance_date}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In Time" %}</label>
{{export.form.attendance_clock_in}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Validated?" %}</label>
{{export.form.attendance_validated}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Min Hour" %}</label>
{{export.form.minimum_hour}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out Time" %}</label>
{{export.form.attendance_clock_out}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "OT Approved?" %}</label>
{{export.form.attendance_overtime_approve}}
</div>
</div>
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Advanced" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance From" %}</label>
{{export.form.attendance_date__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In From" %}</label>
{{export.form.attendance_clock_in__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out From" %}</label>
{{export.form.attendance_clock_out__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "At Work Greater or Equal" %}</label
>
{{export.form.at_work_second__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "OT Greater or Equal" %}</label>
{{export.form.overtime_second__gte}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance Till" %}</label>
{{export.form.attendance_date__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In Till" %}</label>
{{export.form.attendance_clock_in__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out Till" %}</label>
{{export.form.attendance_clock_out__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "At Work Less Than or Equal" %}</label
>
{{export.form.at_work_second__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "OT Less Than or Equal" %}</label>
{{export.form.overtime_second__lte}}
</div>
</div>
</div>
</div>
</div>
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title m-0" id="attendanceExportLavel">
{% trans "Export Attendances" %}
</h2>
<button class="oh-modal__close" aria-label="Close">
<ion-icon name="close-outline"></ion-icon>
</button>
</div>
<div class="oh-modal__dialog-body" id="attendanceExportModalBody">
<form
action="{%url 'attendance-info-export' %}"
method="get"
onsubmit="event.stopPropagation();$(this).parents().find('.oh-modal--show').last().toggleClass('oh-modal--show');"
id="attendanceExportForm"
class="oh-profile-section pt-2"
>
{% csrf_token %}
<div class="oh-dropdown__filter-body" id="export_attendance_form">
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Excel columns" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">
<input type="checkbox" id="select-all-fields" /> {% trans "Select All" %}
</label>
</div>
</div>
</div>
<div class="row">
{% for field in export_form.selected_fields %}
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label"> {{ field }} </label>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Work Info" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Employee" %}</label>
{{export.form.employee_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Department" %}</label>
{{export.form.employee_id__employee_work_info__department_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Shift" %}</label>
{{export.form.shift_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Reporting Manager" %}</label>
{{export.form.employee_id__employee_work_info__reporting_manager_id}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Company" %}</label>
{{export.form.employee_id__employee_work_info__company_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Job Position" %}</label>
{{export.form.employee_id__employee_work_info__job_position_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Work Type" %}</label>
{{export.form.work_type_id}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Work Location" %}</label>
{{export.form.employee_id__employee_work_info__location}}
</div>
</div>
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Attendance" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance Date" %}</label>
{{export.form.attendance_date}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In Time" %}</label>
{{export.form.attendance_clock_in}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Validated?" %}</label>
{{export.form.attendance_validated}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Min Hour" %}</label>
{{export.form.minimum_hour}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out Time" %}</label>
{{export.form.attendance_clock_out}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "OT Approved?" %}</label>
{{export.form.attendance_overtime_approve}}
</div>
</div>
</div>
</div>
</div>
<div class="oh-accordion">
<div class="oh-accordion-header">{% trans "Advanced" %}</div>
<div class="oh-accordion-body">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance From" %}</label>
{{export.form.attendance_date__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In From" %}</label>
{{export.form.attendance_clock_in__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out From" %}</label>
{{export.form.attendance_clock_out__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "At Work Greater or Equal" %}</label
>
{{export.form.at_work_second__gte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "OT Greater or Equal" %}</label
>
{{export.form.overtime_second__gte}}
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
<div class="oh-input-group">
<label class="oh-label">{% trans "Attendance Till" %}</label>
{{export.form.attendance_date__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "In Till" %}</label>
{{export.form.attendance_clock_in__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label">{% trans "Out Till" %}</label>
{{export.form.attendance_clock_out__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "At Work Less Than or Equal" %}</label
>
{{export.form.at_work_second__lte}}
</div>
<div class="oh-input-group">
<label class="oh-label"
>{% trans "OT Less Than or Equal" %}</label
>
{{export.form.overtime_second__lte}}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="oh-modal__dialog-footer p-0 pt-4">
<button class="oh-btn oh-btn--secondary oh-btn--shadow">
{% trans "Export" %}
</button>
</div>
</form>
</div>

View File

@@ -20,6 +20,9 @@ urlpatterns = [
path(
"attendance-info-import", views.attendance_import, name="attendance-info-import"
),
path(
"attendance-info-export-form", views.attendance_export, name="attendance-info-export-form"
),
path(
"attendance-info-export", views.attendance_export, name="attendance-info-export"
),

View File

@@ -307,6 +307,20 @@ def attendance_import(request):
@login_required
def attendance_export(request):
resolver_match = request.resolver_match
if (
resolver_match
and resolver_match.url_name
and resolver_match.url_name == "attendance-info-export-form"
):
return render(
request,
"attendance/attendance/export_filter.html",
context={
"export": AttendanceFilters(queryset=Attendance.objects.all()),
"export_form": AttendanceExportForm(),
},
)
return export_data(
request=request,
model=Attendance,
@@ -324,7 +338,6 @@ def attendance_view(request):
"""
previous_data = request.GET.urlencode()
form = AttendanceForm()
export_form = AttendanceExportForm()
condition = AttendanceValidationCondition.objects.first()
minot = strtime_seconds("00:00")
if condition is not None and condition.minimum_overtime_to_approve is not None:
@@ -388,7 +401,6 @@ def attendance_view(request):
template,
{
"form": form,
"export_form": export_form,
# "validate_attendances": paginator_qry(
# validate_attendances, request.GET.get("vpage")
# ),
@@ -400,7 +412,6 @@ def attendance_view(request):
"ot_attendances_ids": ot_attendances_ids,
"attendances_ids": attendances_ids,
"f": filter_obj,
"export": AttendanceFilters(queryset=Attendance.objects.all()),
"pd": previous_data,
"gp_fields": AttendanceReGroup.fields,
},