From b13d21e64ad2ea9e1203736a54fab5ef75a3310f Mon Sep 17 00:00:00 2001 From: Horilla <131998600+horilla-opensource@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:31:34 +0530 Subject: [PATCH] Dev (#23) * [fix] company leave computation method not returning excpected result * [UPDT]updated company leave updated method's fixed code on leave module * [UPDT]object filter * [FIX]typo in dashboard * [FIX]onboarding dashboard issue after implementing the bulk recruitment * [UPDT]update translations * [UPDT]notification translation * [RMV]remove country-code-validation.html - unwanted file --- asset/views.py | 38 +- attendance/forms.py | 5 +- attendance/models.py | 30 +- .../attendance/attendance/tab_content.html | 6 +- base/translator.py | 1 + horilla/locale/ar/LC_MESSAGES/django.po | 433 ++++++++++-------- horilla/locale/de/LC_MESSAGES/django.po | 429 +++++++++-------- horilla/locale/en/LC_MESSAGES/django.po | 418 +++++++++-------- horilla/locale/es/LC_MESSAGES/django.po | 429 +++++++++-------- horilla/locale/fr/LC_MESSAGES/django.po | 429 +++++++++-------- leave/methods.py | 17 +- leave/models.py | 18 +- onboarding/views.py | 2 +- payroll/methods/methods.py | 27 +- pms/templates/dashboard/pms_dashboard.html | 2 +- pms/templates/okr/objective_list_view.html | 2 +- pms/views.py | 3 + .../candidate/country-code-validation.html | 27 -- recruitment/views.py | 80 +++- templates/dashboard.html | 2 +- 20 files changed, 1296 insertions(+), 1102 deletions(-) delete mode 100644 recruitment/templates/candidate/country-code-validation.html diff --git a/asset/views.py b/asset/views.py index b6974bf5e..023a83979 100644 --- a/asset/views.py +++ b/asset/views.py @@ -171,12 +171,11 @@ def asset_delete(request, id): if status == "In use": messages.info(request, _("Asset is in use")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) - + elif asset_allocation: # if this asset is used in any allocation messages.error(request, _("Asset is used in allocation!.")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) - asset.delete() messages.success(request, _("Asset deleted successfully")) @@ -188,16 +187,15 @@ def asset_delete(request, id): # if asset under the category messages.info(request, _("Asset is in use")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) - + elif asset_allocation: # if this asset is used in any allocation messages.error(request, _("Asset is used in allocation!.")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) - + asset.delete() messages.success(request, _("Asset deleted successfully")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) - @login_required @@ -471,6 +469,10 @@ def asset_request_approve(request, id): request.user.employee_get, recipient=form.assigned_to_employee_id.employee_user_id, verb="Your asset request approved!.", + verb_ar="تم الموافقة على طلب الأصول الخاص بك!", + verb_de="Ihr Antragsantrag wurde genehmigt!", + verb_es="¡Su solicitud de activo ha sido aprobada!", + verb_fr="Votre demande d'actif a été approuvée !", redirect="/asset/asset-request-allocation-view", icon="bag-check", ) @@ -510,6 +512,10 @@ def asset_request_reject(request, id): request.user.employee_get, recipient=asset_request.requested_employee_id.employee_user_id, verb="Your asset request rejected!.", + verb_ar="تم رفض طلب الأصول الخاص بك!", + verb_de="Ihr Antragsantrag wurde abgelehnt!", + verb_es="¡Se ha rechazado su solicitud de activo!", + verb_fr="Votre demande d'actif a été rejetée !", redirect="/asset/asset-request-allocation-view", icon="bag-check", ) @@ -779,23 +785,23 @@ def asset_export_excel(request): "asset_status": [], "asset_lot_number_id": [], } - + fields_to_check = [ - "asset_name", - "asset_description", - "asset_tracking_id", - "asset_purchase_date", - "asset_purchase_cost", - "asset_category_id", - "asset_status", - "asset_lot_number_id", + "asset_name", + "asset_description", + "asset_tracking_id", + "asset_purchase_date", + "asset_purchase_cost", + "asset_category_id", + "asset_status", + "asset_lot_number_id", ] for asset in queryset: for field in fields_to_check: - # Get the value of the field for the current asset + # Get the value of the field for the current asset value = getattr(asset, field) - + # Append the value if it exists, or append None if it's None data[field].append(value if value is not None else None) diff --git a/attendance/forms.py b/attendance/forms.py index c650c2e8f..f6b2540a7 100644 --- a/attendance/forms.py +++ b/attendance/forms.py @@ -52,6 +52,9 @@ class ModelForm(forms.ModelForm): widget, (forms.NumberInput, forms.EmailInput, forms.TextInput) ): label = _(field.label.title()) + print('---------------------------------------------------------------') + print(label) + print('---------------------------------------------------------------') field.widget.attrs.update( {"class": "oh-input w-100", "placeholder": label} ) @@ -165,7 +168,7 @@ class AttendanceForm(ModelForm): employee_id = forms.ModelMultipleChoiceField( queryset=Employee.objects.filter(employee_work_info__isnull=False), - label="Employees", + label=_("Employees"), ) class Meta: diff --git a/attendance/models.py b/attendance/models.py index f585e1181..247ed2600 100644 --- a/attendance/models.py +++ b/attendance/models.py @@ -104,52 +104,58 @@ class Attendance(models.Model): on_delete=models.CASCADE, null=True, related_name="employee_attendances", - verbose_name="Employee", ) shift_id = models.ForeignKey( - EmployeeShift, on_delete=models.DO_NOTHING, null=True, verbose_name="Shift" + EmployeeShift, on_delete=models.DO_NOTHING, null=True, verbose_name=_("Shift") ) work_type_id = models.ForeignKey( WorkType, null=True, blank=True, on_delete=models.DO_NOTHING, - verbose_name="Work Type", + verbose_name=_("Work Type"), ) attendance_date = models.DateField( - null=False, validators=[attendance_date_validate] + null=False, + validators=[attendance_date_validate], + verbose_name=_("Attendance date"), ) attendance_day = models.ForeignKey( EmployeeShiftDay, on_delete=models.DO_NOTHING, null=True ) attendance_clock_in = models.TimeField( - null=True, verbose_name="Check-in", help_text="First Check-in Time" + null=True, verbose_name=_("Check-in"), help_text="First Check-in Time" + ) + attendance_clock_in_date = models.DateField( + null=True, verbose_name=_("Check-in date") ) - attendance_clock_in_date = models.DateField(null=True, verbose_name="Check-in date") attendance_clock_out = models.TimeField( - null=True, verbose_name="check-out", help_text="Last Check-out Time" + null=True, verbose_name=_("Check-out"), help_text="Last Check-out Time" ) attendance_clock_out_date = models.DateField( - null=True, verbose_name="Check-out date" + null=True, verbose_name=_("Check-out date") ) attendance_worked_hour = models.CharField( null=True, default="00:00", max_length=10, validators=[validate_time_format], - verbose_name="At work", + verbose_name=_("At work"), ) minimum_hour = models.CharField( - max_length=10, default="00:00", validators=[validate_time_format] + max_length=10, + default="00:00", + validators=[validate_time_format], + verbose_name=_("Minimum hour"), ) attendance_overtime = models.CharField( default="00:00", validators=[validate_time_format], max_length=10, - verbose_name="Overtime", + verbose_name=_("Overtime"), ) attendance_overtime_approve = models.BooleanField( - default=False, verbose_name="Overtime approved" + default=False, verbose_name=_("Overtime approved") ) attendance_validated = models.BooleanField(default=False) at_work_second = models.IntegerField(null=True, blank=True) diff --git a/attendance/templates/attendance/attendance/tab_content.html b/attendance/templates/attendance/attendance/tab_content.html index e118c22bb..3e1160446 100644 --- a/attendance/templates/attendance/attendance/tab_content.html +++ b/attendance/templates/attendance/attendance/tab_content.html @@ -60,7 +60,7 @@ {{attendance.attendance_date}}