[UPDT] EMPLOYEE: Employee bulk updated with condition to check if employees are selected in list view

This commit is contained in:
Horilla
2024-02-17 11:55:27 +05:30
parent 5c29ef3a43
commit c2e1a7680f
3 changed files with 257 additions and 202 deletions

View File

@@ -348,6 +348,7 @@ $("#employeeBulkUpdateId").click(function (e) {
});
} else {
$("#id_bulk_employee_ids").val(JSON.stringify(ids));
$("#bulkUpdateModal").addClass("oh-modal--show");
}
});

View File

@@ -26,14 +26,14 @@
color: #333;
}
</style>
{% if perms.employee.add_employee %}
<div
class="oh-modal"
id="workInfoImport"
role="dialog"
aria-labelledby="workInfoImport"
aria-hidden="true"
>
>
<div class="oh-modal__dialog">
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title" id="workInfoImportLavel">
@@ -104,7 +104,7 @@
role="dialog"
aria-labelledby="employeeExport"
aria-hidden="true"
>
>
<div class="oh-modal__dialog" style="max-width: 750px">
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title" id="employeeExportLavel">
@@ -131,13 +131,15 @@
</div>
</div>
</div>
{% endif %}
{% if perms.employee.change_employee %}
<div
class="oh-modal"
id="bulkUpdateModal"
role="dialog"
aria-labelledby="bulkUpdateModal"
aria-hidden="true"
>
>
<div class="oh-modal__dialog" style="max-width: 750px">
<div class="oh-modal__dialog-header">
<h2 class="oh-modal__dialog-title" id="bulkUpdateModalLavel">
@@ -166,6 +168,7 @@
</div>
</div>
</div>
{% endif %}
<section class="oh-wrapper oh-main__topbar pb-3" x-data="{searchShow: false}">
<div class="oh-main__titlebar oh-main__titlebar--left">
@@ -360,6 +363,7 @@
</div>
</div>
{% endif %}
{% if perms.employee.change_employee or perms.employee.add_employee or perms.employee.delete_employee %}
<div class="oh-btn-group ml-2" onclick="event.preventDefault();">
<div class="oh-dropdown" x-data="{open: false}">
<button
@@ -375,67 +379,73 @@
style="display: none"
>
<ul class="oh-dropdown__items">
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="work-info-import"
data-toggle="oh-modal-toggle"
data-target="#workInfoImport"
>
{% trans "Import" %}
</a>
</li>
{% if perms.employee.add_employee %}
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="work-info-import"
data-toggle="oh-modal-toggle"
data-target="#workInfoImport"
>
{% trans "Import" %}
</a>
</li>
{% endif %}
{% if emp %}
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="employee-info-export"
data-toggle="oh-modal-toggle"
data-target="#employeeExport"
>
{% trans "Export" %}
</a>
</li>
<li class="oh-dropdown__item">
<a href="#" class="oh-dropdown__link" id="archiveEmployees">
{% trans "Archive" %}
</a>
</li>
<li class="oh-dropdown__item">
<a href="#" class="oh-dropdown__link" id="unArchiveEmployees">
{% trans "Un-Archive" %}
</a>
</li>
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="employeeBulkUpdateId"
data-toggle="oh-modal-toggle"
data-target="#bulkUpdateModal"
>
{% trans "Bulk Update" %}
</a>
</li>
{% if perms.delete_employee %}
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link oh-dropdown__link--danger"
id="deleteEmployees"
>
{% trans "Delete" %}
</a>
</li>
{% endif %} {% endif %}
{% if perms.employee.add_employee %}
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="employee-info-export"
data-toggle="oh-modal-toggle"
data-target="#employeeExport"
>
{% trans "Export" %}
</a>
</li>
{% endif %}
{% if perms.employee.change_employee %}
<li class="oh-dropdown__item">
<a href="#" class="oh-dropdown__link" id="archiveEmployees">
{% trans "Archive" %}
</a>
</li>
<li class="oh-dropdown__item">
<a href="#" class="oh-dropdown__link" id="unArchiveEmployees">
{% trans "Un-Archive" %}
</a>
</li>
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link"
id="employeeBulkUpdateId"
>
{% trans "Bulk Update" %}
</a>
</li>
{% endif %}
{% if perms.employee.delete_employee %}
<li class="oh-dropdown__item">
<a
href="#"
class="oh-dropdown__link oh-dropdown__link--danger"
id="deleteEmployees"
>
{% trans "Delete" %}
</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div>
{% endif %}
{% if perms.employee.add_employee %}
<div class="oh-btn-group ml-2">
{% if perms.employee.add_employee %}
<div class="oh-dropdown">
<a
href='{% url "employee-view-new" %}'
@@ -445,8 +455,8 @@
{% trans "Create" %}
</a>
</div>
{% endif %}
</div>
{% endif %}
</div>
</form>
</div>

View File

@@ -1039,159 +1039,177 @@ def view_employee_bulk_update(request):
bulk_employee_ids_str = (
json.dumps(bulk_employee_ids) if bulk_employee_ids else ""
)
if bulk_employee_ids_str:
class EmployeeBulkUpdateForm(ModelForm):
class Meta:
model = Employee
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
field_obj = Employee._meta.get_field(field)
if field_obj.name in ("country", "state"):
if not "country" in update_fields:
fields.append("country")
widgets["country"] = Select(attrs={"required": True})
fields.append(field)
widgets[field] = Select(attrs={"required": True})
else:
fields.append(field)
if isinstance(field_obj, models.DateField):
widgets[field] = DateInput(
attrs={
"type": "date",
"required": True,
"data-pp": False,
}
)
except:
continue
def __init__(self, *args, **kwargs):
super(EmployeeBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
class WorkInfoBulkUpdateForm(ModelForm):
class Meta:
model = EmployeeWorkInformation
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
parts = str(field).split("__")
if parts[-1]:
if parts[0] == "employee_work_info":
field_obj = EmployeeWorkInformation._meta.get_field(
parts[-1]
)
fields.append(parts[-1])
if isinstance(field_obj, models.DateField):
widgets[parts[-1]] = DateInput(
attrs={"type": "date"}
)
if parts[-1] in ("email", "mobile"):
labels[parts[-1]] = (
_("Work Email")
if field_obj.name == "email"
else _("Work Phone")
)
except:
continue
def __init__(self, *args, **kwargs):
super(WorkInfoBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
class BankInfoBulkUpdateForm(ModelForm):
class Meta:
model = EmployeeBankDetails
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
parts = str(field).split("__")
if parts[-1]:
if parts[0] == "employee_bank_details":
field_obj = EmployeeBankDetails._meta.get_field(
parts[-1]
)
fields.append(parts[-1])
if isinstance(field_obj, models.DateField):
widgets[parts[-1]] = DateInput(
attrs={"type": "date"}
)
if field_obj.name in ("country", "state"):
if not "country" in update_fields:
fields.append("country")
widgets["country"] = Select(
attrs={"required": True}
)
fields.append(parts[-1])
widgets[parts[-1]] = Select(
class EmployeeBulkUpdateForm(ModelForm):
class Meta:
model = Employee
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
field_obj = Employee._meta.get_field(field)
if field_obj.name in ("country", "state"):
if not "country" in update_fields:
fields.append("country")
widgets["country"] = Select(
attrs={"required": True}
)
labels[parts[-1]] = (
_("Bank Country")
if field_obj.name == "country"
else _("Bank State")
fields.append(field)
widgets[field] = Select(attrs={"required": True})
else:
fields.append(field)
if isinstance(field_obj, models.DateField):
widgets[field] = DateInput(
attrs={
"type": "date",
"required": True,
"data-pp": False,
}
)
except:
continue
def __init__(self, *args, **kwargs):
super(EmployeeBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
class WorkInfoBulkUpdateForm(ModelForm):
class Meta:
model = EmployeeWorkInformation
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
parts = str(field).split("__")
if parts[-1]:
if parts[0] == "employee_work_info":
field_obj = EmployeeWorkInformation._meta.get_field(
parts[-1]
)
fields.append(parts[-1])
if isinstance(field_obj, models.DateField):
widgets[parts[-1]] = DateInput(
attrs={"type": "date"}
)
if parts[-1] in ("email", "mobile"):
labels[parts[-1]] = (
_("Work Email")
if field_obj.name == "email"
else _("Work Phone")
)
except:
continue
except:
continue
def __init__(self, *args, **kwargs):
super(WorkInfoBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
def __init__(self, *args, **kwargs):
super(BankInfoBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
class BankInfoBulkUpdateForm(ModelForm):
class Meta:
model = EmployeeBankDetails
fields = []
widgets = {}
labels = {}
for field in update_fields:
try:
parts = str(field).split("__")
if parts[-1]:
if parts[0] == "employee_bank_details":
field_obj = EmployeeBankDetails._meta.get_field(
parts[-1]
)
fields.append(parts[-1])
if isinstance(field_obj, models.DateField):
widgets[parts[-1]] = DateInput(
attrs={"type": "date"}
)
form = EmployeeBulkUpdateForm()
form1 = WorkInfoBulkUpdateForm()
form2 = BankInfoBulkUpdateForm()
context = {
"form": form,
"form1": form1,
"form2": form2,
"update_fields": update_fields_str,
"bulk_employee_ids": bulk_employee_ids_str,
}
return render(
request,
"employee_personal_info/bulk_update.html",
context=context,
)
if field_obj.name in ("country", "state"):
if not "country" in update_fields:
fields.append("country")
widgets["country"] = Select(
attrs={"required": True}
)
fields.append(parts[-1])
widgets[parts[-1]] = Select(
attrs={"required": True}
)
labels[parts[-1]] = (
_("Bank Country")
if field_obj.name == "country"
else _("Bank State")
)
except:
continue
def __init__(self, *args, **kwargs):
super(BankInfoBulkUpdateForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.required = True
form = EmployeeBulkUpdateForm()
form1 = WorkInfoBulkUpdateForm()
form2 = BankInfoBulkUpdateForm()
context = {
"form": form,
"form1": form1,
"form2": form2,
"update_fields": update_fields_str,
"bulk_employee_ids": bulk_employee_ids_str,
}
return render(
request,
"employee_personal_info/bulk_update.html",
context=context,
)
else:
messages.warning(
request, _("There are no employees selected for bulk update.")
)
return redirect(employee_view)
@login_required
@permission_required("employee.change_employee")
def save_employee_bulk_update(request):
if request.method == "POST":
update_fields_str = request.POST.get("update_fields", "")
update_fields = json.loads(update_fields_str) if update_fields_str else []
dict_value = request.__dict__["_post"]
bulk_employee_ids_str = request.POST.get("bulk_employee_ids", "")
bulk_employee_ids = (
json.loads(bulk_employee_ids_str) if bulk_employee_ids_str else []
)
employee_list = ast.literal_eval(bulk_employee_ids)
update_fields_str = request.POST.get("update_fields", "")
update_fields = json.loads(update_fields_str) if update_fields_str else []
dict_value = request.__dict__["_post"]
for id in employee_list:
try:
employee_instance = Employee.objects.get(id=int(id))
(
employee_work_info,
created,
) = EmployeeWorkInformation.objects.get_or_create(
employee_id=employee_instance
)
(
employee_bank,
created,
) = EmployeeBankDetails.objects.get_or_create(
employee_id=employee_instance
)
except (ValueError, OverflowError):
employee_list.remove(id)
pass
for field in update_fields:
parts = str(field).split("__")
if parts[-1]:
if parts[0] == "employee_work_info":
for id in employee_list:
employee_instance = Employee.objects.get(id=int(id))
(
employee_bank,
created,
) = EmployeeWorkInformation.objects.get_or_create(
employee_id=employee_instance
)
employee_queryset = EmployeeWorkInformation.objects.filter(
employee_id__in=employee_list
)
@@ -1199,25 +1217,51 @@ def save_employee_bulk_update(request):
employee_queryset.update(**{parts[-1]: value})
elif parts[0] == "employee_bank_details":
for id in employee_list:
employee_instance = Employee.objects.get(id=int(id))
(
employee_bank,
created,
) = EmployeeBankDetails.objects.get_or_create(
employee_id=employee_instance
employee_queryset = EmployeeBankDetails.objects.filter(
employee_id__in=employee_list
)
employee_queryset = EmployeeBankDetails.objects.filter(
employee_id__in=employee_list
)
value = dict_value.get(parts[-1])
employee_queryset.update(**{parts[-1]: value})
value = dict_value.get(parts[-1])
employee_queryset.update(**{parts[-1]: value})
else:
employee_queryset = Employee.objects.filter(id__in=employee_list)
value = dict_value.get(field)
employee_queryset.update(**{field: value})
if len(employee_list) > 0:
messages.success(
request,
_(
"{} employees information updated successfully".format(
len(employee_list)
)
),
)
return redirect("/employee/employee-view/?view=list")
@login_required
@permission_required("employee.change_employee")
def employee_account_block_unblock(request, emp_id):
employee = get_object_or_404(Employee, id=emp_id)
if not employee:
messages.info(request, _("Employee not found"))
return redirect(employee_view)
user = get_object_or_404(User, id=employee.employee_user_id.id)
if not user:
messages.info(request, _("Employee not found"))
return redirect(employee_view)
user.is_active = not user.is_active
action_message = _("blocked") if not user.is_active else _("unblocked")
user.save()
messages.success(
request,
_("{employee}'s account {action_message} successfully!").format(
employee=employee, action_message=action_message
),
)
return redirect(employee_view_individual,obj_id=emp_id)
@login_required
@permission_required("employee.add_employee")
def employee_view_new(request):