diff --git a/asset/views.py b/asset/views.py index 594032a07..9f9396890 100644 --- a/asset/views.py +++ b/asset/views.py @@ -65,6 +65,7 @@ from horilla.decorators import ( permission_required, ) from horilla.group_by import group_by_queryset +from horilla.horilla_settings import HORILLA_DATE_FORMATS from notifications.signals import notify @@ -1144,26 +1145,12 @@ def asset_export_excel(request): ) else: date_format = "MMM. D, YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } # Convert the string to a datetime.date object start_date = datetime.strptime(str(value), "%Y-%m-%d").date() - # Print the formatted date for each format - for format_name, format_string in date_formats.items(): + # The formatted date for each format + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: value = start_date.strftime(format_string) diff --git a/attendance/forms.py b/attendance/forms.py index df51aa273..f1a538836 100644 --- a/attendance/forms.py +++ b/attendance/forms.py @@ -726,6 +726,7 @@ excluded_fields = [ "request_type", "month_sequence", "objects", + "horilla_history", ] diff --git a/attendance/methods/utils.py b/attendance/methods/utils.py index e9fd5ff95..b9df2f08b 100644 --- a/attendance/methods/utils.py +++ b/attendance/methods/utils.py @@ -18,6 +18,7 @@ from django.utils.translation import gettext_lazy as _ from base.methods import get_pagination from base.models import WEEK_DAYS, CompanyLeaves, Holidays from employee.models import Employee +from horilla.horilla_settings import HORILLA_DATE_FORMATS, HORILLA_TIME_FORMATS MONTH_MAPPING = { "january": 1, @@ -523,15 +524,11 @@ class META: def parse_time(time_str): - time_formats = { - "hh:mm A": "%I:%M %p", # 12-hour format - "HH:mm": "%H:%M", # 24-hour format - } if isinstance(time_str, time): # Check if it's already a time object return time_str if isinstance(time_str, str): - for format_str in time_formats.values(): + for format_str in HORILLA_TIME_FORMATS.values(): try: return datetime.strptime(time_str, format_str).time() except ValueError: @@ -548,23 +545,10 @@ def parse_date(date_str, error_key, activity): def get_date(date): - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } if isinstance(date, datetime): return date elif isinstance(date, str): - for format_name, format_str in date_formats.items(): + for format_name, format_str in HORILLA_DATE_FORMATS.items(): try: return datetime.strptime(date, format_str) except ValueError: diff --git a/attendance/views/views.py b/attendance/views/views.py index 853465ca2..b0ee33300 100644 --- a/attendance/views/views.py +++ b/attendance/views/views.py @@ -13,6 +13,8 @@ provide the main entry points for interacting with the application's functionali import logging +from horilla.horilla_settings import HORILLA_DATE_FORMATS + logger = logging.getLogger(__name__) import calendar @@ -2108,22 +2110,7 @@ def work_record_export(request): else: date_format = "DD-MM-YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } - - format_string = date_formats[date_format] + format_string = HORILLA_DATE_FORMATS.get(date_format) for employee in employees: row_data = {"Employee": employee} diff --git a/base/methods.py b/base/methods.py index cffe10250..1ac0ff218 100644 --- a/base/methods.py +++ b/base/methods.py @@ -22,6 +22,7 @@ from xhtml2pdf import pisa from base.models import Company, CompanyLeaves, DynamicPagination, Holidays from employee.models import Employee, EmployeeWorkInformation from horilla.decorators import login_required +from horilla.horilla_settings import HORILLA_DATE_FORMATS, HORILLA_TIME_FORMATS def filtersubordinates(request, queryset, perm=None, field=None): @@ -413,7 +414,42 @@ def closest_numbers(numbers: list, input_number: int) -> tuple: return (previous_number, next_number) -@login_required +def format_export_value(value, employee): + work_info = EmployeeWorkInformation.objects.filter(employee_id=employee).first() + time_format = ( + work_info.company_id.time_format + if work_info and work_info.company_id + else "HH:mm" + ) + date_format = ( + work_info.company_id.date_format + if work_info and work_info.company_id + else "MMM. D, YYYY" + ) + + if isinstance(value, time): + # Convert the string to a datetime.time object + check_in_time = datetime.strptime(str(value).split(".")[0], "%H:%M:%S").time() + + # Print the formatted time for each format + for format_name, format_string in HORILLA_TIME_FORMATS.items(): + if format_name == time_format: + value = check_in_time.strftime(format_string) + + elif type(value) == date: + # Convert the string to a datetime.date object + start_date = datetime.strptime(str(value), "%Y-%m-%d").date() + # Print the formatted date for each format + for format_name, format_string in HORILLA_DATE_FORMATS.items(): + if format_name == date_format: + value = start_date.strftime(format_string) + + elif isinstance(value, datetime): + value = str(value) + + return value + + def export_data(request, model, form_class, filter_class, file_name): fields_mapping = { "male": _("Male"), @@ -441,6 +477,7 @@ def export_data(request, model, form_class, filter_class, file_name): "late_come": _("Late Come"), "early_out": _("Early Out"), } + employee = request.user.employee_get selected_columns = [] today_date = date.today().strftime("%Y-%m-%d") @@ -486,82 +523,7 @@ def export_data(request, model, form_class, filter_class, file_name): value = _(value.title()) # Check if the type of 'value' is time - if isinstance(value, time): - user = request.user - employee = user.employee_get - - # Taking the company_name of the user - info = EmployeeWorkInformation.objects.filter(employee_id=employee) - if info.exists(): - for data in info: - employee_company = data.company_id - company_name = Company.objects.filter(id=employee_company.id) - emp_company = company_name.first() - # Access the date_format attribute directly - time_format = ( - emp_company.time_format if emp_company else "hh:mm A" - ) - else: - time_format = "hh:mm A" - - time_formats = { - "hh:mm A": "%I:%M %p", # 12-hour format - "HH:mm": "%H:%M", # 24-hour format - } - - # Convert the string to a datetime.time object - check_in_time = datetime.strptime( - str(value).split(".")[0], "%H:%M:%S" - ).time() - - # Print the formatted time for each format - for format_name, format_string in time_formats.items(): - if format_name == time_format: - value = check_in_time.strftime(format_string) - - # Check if the type of 'value' is date - if type(value) == date: - user = request.user - employee = user.employee_get - - # Taking the company_name of the user - info = EmployeeWorkInformation.objects.filter(employee_id=employee) - if info.exists(): - for data in info: - employee_company = data.company_id - company_name = Company.objects.filter(company=employee_company) - emp_company = company_name.first() - - # Access the date_format attribute directly - date_format = ( - emp_company.date_format if emp_company else "MMM. D, YYYY" - ) - else: - date_format = "MMM. D, YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } - - # Convert the string to a datetime.date object - start_date = datetime.strptime(str(value), "%Y-%m-%d").date() - - # Print the formatted date for each format - for format_name, format_string in date_formats.items(): - if format_name == date_format: - value = start_date.strftime(format_string) - if isinstance(value, datetime): - value = str(value) + value = format_export_value(value, employee) data_export[verbose_name].append(value) data_frame = pd.DataFrame(data=data_export) @@ -777,8 +739,7 @@ def get_date_range(start_date, end_date): start_date = date(2023, 1, 1) end_date = date(2023, 1, 10) date_range = get_date_range(start_date, end_date) - for date_obj in date_range: - print(date_obj) + """ date_list = [] delta = end_date - start_date diff --git a/base/templates/base/rotating_work_type/rotating_work_type_assign_view.html b/base/templates/base/rotating_work_type/rotating_work_type_assign_view.html index 053a5135d..13a8f2cdf 100644 --- a/base/templates/base/rotating_work_type/rotating_work_type_assign_view.html +++ b/base/templates/base/rotating_work_type/rotating_work_type_assign_view.html @@ -3,451 +3,397 @@ {% load basefilters %} {% include 'filter_tags.html' %} {% if messages %} -
- {% for message in messages %} -
-
- {{ message }} +
+ {% for message in messages %} +
+
+ {{ message }} +
+
+ {% endfor %}
-
- {% endfor %} -
{% endif %} {% if perms.base.view_worktyperequest and rwork_type_assign %} - {% if perms.base.change_worktyperequest %} - - {% endif %} -
- {% trans "Select All Worktypes" %} -
- - - + {% if perms.base.change_worktyperequest %} + + {% endif %} +
+ {% trans "Select All Worktypes" %} +
+ + + {% endif %} {% if rwork_type_assign %} -
-
-
- -
-
    -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
- {% trans "Employee" %} -
-
{% trans "Title" %}
-
{% trans "Based On" %}
-
{% trans "Rotate" %}
-
{% trans "Start Date" %}
-
{% trans "Current Work Type" %}
-
{% trans "Next Switch" %}
-
{% trans "Next Work Type" %}
-
{% trans "Actions" %}
-
-
-
- {% for rwork_type in rwork_type_assign %} -
-
-
- -
-
-
-
-
- Username +
+
+
+ +
+
    +
- {{rwork_type.employee_id}} -
-
- {{rwork_type.rotating_work_type_id}} -
-
{{rwork_type.get_based_on_display}}
-
- {% if rwork_type.based_on == 'after' %} - {% trans "Rotate after" %} {{rwork_type.rotate_after_day}} {% trans "days" %} - {% elif rwork_type.based_on == "weekly" %} - {% trans "Weekly every" %} {{rwork_type.rotate_every_weekend}} - {% elif rwork_type.based_on == "monthly" %} - {% if rwork_type.rotate_every == "1" %} - {% trans "Rotate every" %} {{rwork_type.rotate_every}}{% trans "st day of month" %} - {% elif rwork_type.rotate_every == "2" %} - {% trans "Rotate every" %} {{rwork_type.rotate_every}}{% trans "nd day of month" %} - {% elif rwork_type.rotate_every == "3" %} - {% trans "Rotate every" %} {{rwork_type.rotate_every}}{% trans "rd day of month" %} - {% elif rwork_type.rotate_every == "last" %} - {% trans "Rotate every last day of month" %} - {% else %} - {% trans "Rotate every" %} {{rwork_type.rotate_every}}{% trans "th day of month" %} - {% endif %} - {% endif %} -
-
{{rwork_type.start_date}}
-
{{rwork_type.current_work_type}}
-
{{rwork_type.next_change_date}}
-
{{rwork_type.next_work_type}}
-
-
- {% if perms.base.change_rotatingworktypeassign or request.user|is_reportingmanager %} - - - - - - - {% endif %} - {% if perms.base.change_rotatingworktypeassign or request.user|is_reportingmanager %} - {% if rwork_type.is_active %} -
- -
- {% else %} -
- -
- {% endif %} - {% endif %} - {% if perms.base.delete_rotatingworktypeassign or request.user|is_reportingmanager %} -
- {% csrf_token %} - -
- {% endif %} -
-
-
- {% endfor %}
-
- - - -
- - {% trans "Page" %} {{ rwork_type_assign.number }} {% trans "of" %} - {{rwork_type_assign.paginator.num_pages }}. - - -
- -
+ + +
+ + {% trans "Page" %} {{ rwork_type_assign.number }} {% trans "of" %} + {{rwork_type_assign.paginator.num_pages }}. + + +
+ +
{% else %} - -
- + +
+
- {% trans "No search result found!" %} + {% trans "No search result found!" %}
-
+
{% endif %} diff --git a/base/templates/shift_request/htmx/requests.html b/base/templates/shift_request/htmx/requests.html index 07770995a..2421f9812 100755 --- a/base/templates/shift_request/htmx/requests.html +++ b/base/templates/shift_request/htmx/requests.html @@ -98,7 +98,7 @@
{{shift_request.previous_shift_id}}
{{shift_request.requested_date}}
{{shift_request.requested_till}}
-
{% if shift_request.approved %}{% trans "Approved" %}{% elif shift_request.canceled %}{% trans "Cancelled" %}{% else %}{% trans "Requested" %}{% endif %}
+
{% if shift_request.approved %}{% trans "Approved" %}{% elif shift_request.canceled %}{% trans "Rejected" %}{% else %}{% trans "Requested" %}{% endif %}
{{shift_request.description|truncatechars:30}}
diff --git a/base/views.py b/base/views.py index 8b5f37c6b..ff561a9e7 100644 --- a/base/views.py +++ b/base/views.py @@ -6172,7 +6172,6 @@ def holidays_excel_template(request): 'attachment; filename="assign_leave_type_excel.xlsx"' ) data_frame.to_excel(response, index=False) - print(response) return response except Exception as exception: return HttpResponse(exception) diff --git a/employee/templates/tabs/shift-tab.html b/employee/templates/tabs/shift-tab.html index 4840ba3a7..06ae601bb 100644 --- a/employee/templates/tabs/shift-tab.html +++ b/employee/templates/tabs/shift-tab.html @@ -142,12 +142,8 @@
-
-
-
- {% trans "Employee" %} -
-
+
+ {% trans "Employee" %}
{% trans "Requested Work Type" %} @@ -163,10 +159,9 @@
{% trans "Description" %}
{% trans "Status" %}
-
{% trans "Actions" %}
+
{% trans "Actions" %}
{% if not request.GET.profile %} {% if perms.base.change_worktyperequest or request.user|is_reportingmanager %} -
{% endif %} {% endif %} @@ -182,7 +177,7 @@ data-toggle="oh-modal-toggle" draggable="true" > -
+
@@ -232,7 +227,14 @@ - {% endif %} {% if work_type_request.approved == False %} + {% endif %} + + + + {% if work_type_request.approved == False %}
{% csrf_token %} - {% endif %} -
-
- {% if work_type_request.canceled == False %} - - - - {% else %} - - {% endif %} +
+
+ {% if work_type_request.approved == False and work_type_request.canceled == False %} + + + + {% else %} + + {% endif %} + {% if work_type_request.canceled == False %} + + + + {% else %} + + {% endif %} +
{% endif %} {% endif %} @@ -316,13 +312,7 @@
-
-
-
- {% trans "Employee" %} -
-
-
+
{% trans "Employee" %}
{% trans "Title" %}
{% trans "Based On" %}
{% trans "Rotate" %}
@@ -338,28 +328,26 @@
{% trans "Next Shift" %}
{% trans "Status" %}
{% if not request.GET.profile and perms.base.change_rotatingworktypeassign or perms.base.delete_rotatingshiftassign or request.user|check_manager:rshift or request.user|is_reportingmanager %} -
{% trans "Actions" %}
+
{% trans "Actions" %}
{% endif %}
{% for rshift in rshift_assign %}
-
-
+
-
- Username -
+
+ Username +
{{rshift.employee_id}}
-
{{rshift.rotating_shift_id}} @@ -402,7 +390,7 @@ {% if not request.GET.profile and perms.base.change_rotatingworktypeassign or perms.base.delete_rotatingshiftassign or request.user|check_manager:rshift or request.user|is_reportingmanager %}
- {% if perms.base.change_rotatingshiftassign or perms.base.change_rotatingworktypeassign or request.user|check_manager:rshift or request.user|is_reportingmanager %} + {% if perms.base.change_rotatingshiftassign or request.user|check_manager:rshift or request.user|is_reportingmanager %} + + + {% endif %} + {% if perms.base.change_rotatingshiftassign or request.user|is_reportingmanager %} + {% if rshift.is_active %} + + + + + {% else %} +
+ +
+ {% endif %} + {% endif %} {% if perms.base.delete_rotatingshiftassign or request.user|is_reportingmanager %}
-
-
-
- {% trans "Employee" %} -
-
+
+ {% trans "Employee" %}
{% trans "Title" %}
{% trans "Based On" %}
@@ -483,7 +493,13 @@ {% trans "Status" %}
{% if not request.GET.profile and perms.base.change_rotatingworktypeassign or perms.base.delete_rotatingworktypeassign or request.user|check_manager:rwork_type or request.user|is_reportingmanager %} -
{% trans "Actions" %}
+
+
+
+ {% trans "Actions" %} +
+
+
{% endif %}
@@ -492,20 +508,18 @@
-
-
-
-
- Username -
- {{rwork_type.employee_id}} +
+
+
+ Username
+ {{rwork_type.employee_id}}
@@ -516,14 +530,14 @@
{% if rwork_type.based_on == 'after' %} - {% trans "Rotate after" %}{{rwork_type.rotate_after_day}}{% trans " days" %} + {% trans "Rotate after " %}{{rwork_type.rotate_after_day}}{% trans " days" %} {% elif rwork_type.based_on == "weekly" %} - {% trans "Weekly every" %}{{rwork_type.rotate_every_weekend}} + {% trans "Weekly every " %}{{rwork_type.rotate_every_weekend}} {% elif rwork_type.based_on == "monthly" %} {% if rwork_type.rotate_every == "1" %} {% trans "Rotate every "%}{{rwork_type.rotate_every}}{% trans "st day of month " %} {% elif rwork_type.rotate_every == "2" %} - {% trans "Rotate every" %}{{rwork_type.rotate_every}}{% trans "nd day of month " %} + {% trans "Rotate every " %}{{rwork_type.rotate_every}}{% trans "nd day of month " %} {% elif rwork_type.rotate_every == "3" %} {% trans "Rotate every " %}{{rwork_type.rotate_every}}{% trans "rd day of month" %} {% elif rwork_type.rotate_every == "last" %} @@ -551,30 +565,55 @@ {% endif %}
{% if not request.GET.profile and perms.base.change_rotatingworktypeassign or perms.base.delete_rotatingworktypeassign or request.user|check_manager:rwork_type %} -
+
- {% if perms.base.change_rotatingworktypeassign or request.user|check_manager:rwork_type or request.user|is_reportingmanager %} - - - {% endif %} + {% if perms.base.change_rotatingworktypeassign or request.user|is_reportingmanager %} + + + + + + + {% endif %} + {% if perms.base.change_rotatingworktypeassign or request.user|is_reportingmanager %} + {% if rwork_type.is_active %} + + + + {% else %} +
+ +
+ {% endif %} + {% endif %} {% if perms.base.delete_rotatingworktypeassign or request.user|is_reportingmanager %} -
+ {% csrf_token %} - +
- {% endif %} + {% endif %}
{% endif %} @@ -621,10 +660,10 @@ {% trans "Requested Till" %}
{% trans "Description" %}
-
{% trans "Actions" %}
+
{% trans "Status" %}
+
{% trans "Actions" %}
{% if not request.GET.profile %} {% if perms.base.change_shiftrequest or request.user|check_manager:shift_request %} -
{% endif %} {% endif %} @@ -664,6 +703,9 @@
{{shift_request.description}}
+
+ {% if shift_request.approved %}{% trans "Approved" %}{% elif shift_request.canceled %}{% trans "Rejected" %}{% else %}{% trans "Requested" %}{% endif %} +
{% comment %} start of edit button {% endcomment %} @@ -681,7 +723,12 @@ - {% endif %} {% comment %} end of edit button {% endcomment %} + {% endif %} + + + {% if shift_request.approved == False %}
{% if not request.GET.profile %} - {% if perms.base.change_shiftrequest or request.user|check_manager:shift_request %} -
- {% if shift_request.approved == False and shift_request.canceled == False%} - - {% trans "Approve" %} + {% if perms.base.change_shiftrequest or request.user|is_reportingmanager %} +
+ -
- {% if shift_request.canceled == False %} - - {% trans "Cancel" %} + + + + {% endif %} + + {% if shift_request.canceled == False %} + + {% else %} - - {% endif %} -
+ + + + {% endif %} +
+
{% endif %} {% endif %}
diff --git a/employee/views.py b/employee/views.py index b15e06b28..436c5d8cb 100755 --- a/employee/views.py +++ b/employee/views.py @@ -97,6 +97,7 @@ from horilla.decorators import ( ) from horilla.filters import HorillaPaginator from horilla.group_by import group_by_queryset +from horilla.horilla_settings import HORILLA_DATE_FORMATS from horilla.methods import get_horilla_model_class from horilla_audit.models import AccountBlockUnblock, HistoryTrackingFields from horilla_documents.forms import ( @@ -2721,26 +2722,11 @@ def work_info_export(request): ) else: date_format = "MMM. D, YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } - # Convert the string to a datetime.date object start_date = datetime.strptime(str(value), "%Y-%m-%d").date() # Print the formatted date for each format - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: data = start_date.strftime(format_string) diff --git a/horilla/horilla_settings.py b/horilla/horilla_settings.py index 44a4f83d7..2b796c40e 100644 --- a/horilla/horilla_settings.py +++ b/horilla/horilla_settings.py @@ -6,4 +6,24 @@ DB_INIT_PASSWORD: str The password used for database setup and initialization. This password is a 48-character alphanumeric string generated using a UUID to ensure high entropy and security. """ -DB_INIT_PASSWORD = "" +DB_INIT_PASSWORD = "d3f6a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d" + + +HORILLA_DATE_FORMATS = { + "DD-MM-YYYY": "%d-%m-%Y", + "DD.MM.YYYY": "%d.%m.%Y", + "DD/MM/YYYY": "%d/%m/%Y", + "MM/DD/YYYY": "%m/%d/%Y", + "YYYY-MM-DD": "%Y-%m-%d", + "YYYY/MM/DD": "%Y/%m/%d", + "MMMM D, YYYY": "%B %d, %Y", + "DD MMMM, YYYY": "%d %B, %Y", + "MMM. D, YYYY": "%b. %d, %Y", + "D MMM. YYYY": "%d %b. %Y", + "dddd, MMMM D, YYYY": "%A, %B %d, %Y", +} + +HORILLA_TIME_FORMATS = { + "hh:mm A": "%I:%M %p", # 12-hour format + "HH:mm": "%H:%M", # 24-hour format +} diff --git a/horilla/methods.py b/horilla/methods.py index c827ec19f..2e2dcbf7c 100644 --- a/horilla/methods.py +++ b/horilla/methods.py @@ -1,4 +1,5 @@ import contextlib + from django.contrib.contenttypes.models import ContentType diff --git a/payroll/models/models.py b/payroll/models/models.py index 872f7051c..94db2024b 100644 --- a/payroll/models/models.py +++ b/payroll/models/models.py @@ -59,8 +59,6 @@ def get_date_range(start_date, end_date): start_date = date(2023, 1, 1) end_date = date(2023, 1, 10) date_range = get_date_range(start_date, end_date) - for date_obj in date_range: - print(date_obj) """ date_list = [] delta = end_date - start_date diff --git a/payroll/views/component_views.py b/payroll/views/component_views.py index f4b4af99f..dbe1a1df5 100644 --- a/payroll/views/component_views.py +++ b/payroll/views/component_views.py @@ -35,6 +35,7 @@ from horilla.decorators import ( permission_required, ) from horilla.group_by import group_by_queryset +from horilla.horilla_settings import HORILLA_DATE_FORMATS from horilla.methods import dynamic_attr, get_horilla_model_class # from leave.models import AvailableLeave @@ -1025,26 +1026,12 @@ def payslip_export(request): ) else: date_format = "MMM. D, YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } # Convert the string to a datetime.date object start_date = datetime.strptime(str(value), "%Y-%m-%d").date() # Print the formatted date for each format - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: data = start_date.strftime(format_string) else: @@ -1923,23 +1910,9 @@ def payslip_detailed_export_data(request): else: date_format = "MMM. D, YYYY" - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } - start_date = datetime.strptime(str(value), "%Y-%m-%d").date() - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: data = start_date.strftime(format_string) else: diff --git a/payroll/views/views.py b/payroll/views/views.py index 12e912691..ba8d162a7 100644 --- a/payroll/views/views.py +++ b/payroll/views/views.py @@ -36,6 +36,7 @@ from horilla.decorators import ( permission_required, ) from horilla.group_by import group_by_queryset +from horilla.horilla_settings import HORILLA_DATE_FORMATS from notifications.signals import notify from payroll.context_processors import get_active_employees from payroll.filters import ContractFilter, ContractReGroup, PayslipFilter @@ -946,20 +947,6 @@ def payslip_export(request): else: date_format = "MMM. D, YYYY" - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } start_date_str = str(payslip.start_date) end_date_str = str(payslip.end_date) @@ -967,11 +954,11 @@ def payslip_export(request): start_date = datetime.strptime(start_date_str, "%Y-%m-%d").date() end_date = datetime.strptime(end_date_str, "%Y-%m-%d").date() - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: formatted_start_date = start_date.strftime(format_string) - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: formatted_end_date = end_date.strftime(format_string) @@ -1371,31 +1358,16 @@ def payslip_pdf(request, id): start_date_str = data["start_date"] end_date_str = data["end_date"] - # Define date formats - date_formats = { - "DD-MM-YYYY": "%d-%m-%Y", - "DD.MM.YYYY": "%d.%m.%Y", - "DD/MM/YYYY": "%d/%m/%Y", - "MM/DD/YYYY": "%m/%d/%Y", - "YYYY-MM-DD": "%Y-%m-%d", - "YYYY/MM/DD": "%Y/%m/%d", - "MMMM D, YYYY": "%B %d, %Y", - "DD MMMM, YYYY": "%d %B, %Y", - "MMM. D, YYYY": "%b. %d, %Y", - "D MMM. YYYY": "%d %b. %Y", - "dddd, MMMM D, YYYY": "%A, %B %d, %Y", - } - # Convert the string to a datetime.date object start_date = datetime.strptime(start_date_str, "%Y-%m-%d").date() end_date = datetime.strptime(end_date_str, "%Y-%m-%d").date() # Print the formatted date for each format - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: formatted_start_date = start_date.strftime(format_string) - for format_name, format_string in date_formats.items(): + for format_name, format_string in HORILLA_DATE_FORMATS.items(): if format_name == date_format: formatted_end_date = end_date.strftime(format_string)