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 %} -
+
+