From 163454007190576452ef50bf52a5a97ddeaa0661 Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 14 Feb 2025 10:08:50 +0530 Subject: [PATCH] Pylint fixes --- project/cbv/accessibility.py | 20 +++- project/cbv/cbv_decorators.py | 37 +++--- project/cbv/dashboard.py | 11 +- project/cbv/project_stage.py | 6 +- project/cbv/projects.py | 89 ++++++++------- project/cbv/tasks.py | 24 ++-- project/cbv/timesheet.py | 107 ++++++++++-------- project/templates/cbv/projects/actions.html | 6 +- project/templates/cbv/projects/filter.html | 2 +- .../cbv/projects/project_details.html | 12 +- .../templates/cbv/projects/project_list.html | 9 +- .../templates/cbv/projects/project_nav.html | 2 +- .../templates/cbv/projects/project_tab.html | 2 +- project/templates/cbv/projects/projects.html | 40 +++---- project/templates/cbv/tasks/task_actions.html | 2 +- .../cbv/tasks/task_detail_actions.html | 2 +- .../templates/cbv/tasks/task_document.html | 2 +- project/templates/cbv/tasks/task_filter.html | 2 +- project/templates/cbv/tasks/task_form.html | 2 +- .../cbv/tasks/task_template_view.html | 4 +- .../cbv/timesheet/detail_actions.html | 2 +- .../cbv/timesheet/employee_field.html | 2 +- project/templates/cbv/timesheet/filter.html | 2 +- .../templates/cbv/timesheet/task_field.html | 2 +- .../cbv/timesheet/task_timesheet.html | 2 +- .../templates/cbv/timesheet/timesheet.html | 102 ++++++++--------- .../cbv/timesheet/timesheet_nav.html | 2 +- .../new/forms/quick_create_task_form.html | 2 +- .../templates/task/new/task_card_view.html | 80 +++++++------ project/templatetags/taskfilters.py | 41 ++++--- 30 files changed, 328 insertions(+), 290 deletions(-) diff --git a/project/cbv/accessibility.py b/project/cbv/accessibility.py index 0dda4af80..a2375fed9 100644 --- a/project/cbv/accessibility.py +++ b/project/cbv/accessibility.py @@ -2,14 +2,14 @@ Accessibility """ - from django.contrib.auth.context_processors import PermWrapper from employee.models import Employee from project.models import Project, Task -def task_crud_accessibility(request, instance: object = None, user_perms: PermWrapper = [], *args, **kwargs +def task_crud_accessibility( + request, instance: object = None, user_perms: PermWrapper = [], *args, **kwargs ) -> bool: """ to access crud operations @@ -17,15 +17,23 @@ def task_crud_accessibility(request, instance: object = None, user_perms: PermWr employee = request.user.employee_get is_task_manager = employee in instance.task_managers.all() is_project_manager = employee in instance.project.managers.all() - if (request.user.has_perm("project.view_task") or is_project_manager or is_task_manager): + if ( + request.user.has_perm("project.view_task") + or is_project_manager + or is_task_manager + ): return True else: return False -def project_manager_accessibility(request, instance: object = None, user_perms: PermWrapper = [], *args, **kwargs + +def project_manager_accessibility( + request, instance: object = None, user_perms: PermWrapper = [], *args, **kwargs ) -> bool: """ to access edit Project """ - return (request.user.employee_get in instance.managers.all() or - request.user.is_superuser) \ No newline at end of file + return ( + request.user.employee_get in instance.managers.all() + or request.user.is_superuser + ) diff --git a/project/cbv/cbv_decorators.py b/project/cbv/cbv_decorators.py index 2fe609ae0..fce0ffc69 100644 --- a/project/cbv/cbv_decorators.py +++ b/project/cbv/cbv_decorators.py @@ -1,33 +1,44 @@ - - -from project.methods import any_project_manager, any_project_member, any_task_manager, any_task_member, has_subordinates from django.contrib import messages from django.http import HttpResponseRedirect + from horilla.horilla_middlewares import _thread_locals +from project.methods import ( + any_project_manager, + any_project_member, + any_task_manager, + any_task_member, + has_subordinates, +) + # from project.sidebar import has_subordinates -decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs) +decorator_with_arguments = ( + lambda decorator: lambda *args, **kwargs: lambda func: decorator( + func, *args, **kwargs + ) +) @decorator_with_arguments -def is_projectmanager_or_member_or_perms(function,perm): +def is_projectmanager_or_member_or_perms(function, perm): def _function(self, *args, **kwargs): """ - This method is used to check the employee is project manager or not + This method is used to check the employee is project manager or not """ - request = getattr(_thread_locals,"request") - if not getattr(self,"request",None): + request = getattr(_thread_locals, "request") + if not getattr(self, "request", None): self.request = request user = request.user if ( - user.has_perm(perm) or - any_project_manager(user) or - any_project_member(user) or - any_task_manager(user) or - any_task_member(user) + user.has_perm(perm) + or any_project_manager(user) + or any_project_member(user) + or any_task_manager(user) + or any_task_member(user) ): return function(self, *args, **kwargs) messages.info(request, "You don't have permission.") return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) + return _function diff --git a/project/cbv/dashboard.py b/project/cbv/dashboard.py index 4ecdca142..781d8c9a1 100644 --- a/project/cbv/dashboard.py +++ b/project/cbv/dashboard.py @@ -5,18 +5,19 @@ import calendar import datetime from typing import Any -from django.db.models import Count + +from django.db.models import Count, Q from django.db.models.query import QuerySet from django.urls import resolve, reverse -from django.utils.translation import gettext_lazy as _ from django.utils.decorators import method_decorator -from django.db.models import Q +from django.utils.translation import gettext_lazy as _ + from base.methods import get_subordinates -from horilla_views.generic.cbv.views import HorillaListView, HorillaDetailedView from horilla_views.cbv_methods import login_required +from horilla_views.generic.cbv.views import HorillaDetailedView, HorillaListView +from project.cbv.cbv_decorators import is_projectmanager_or_member_or_perms from project.filters import ProjectFilter from project.models import Project -from project.cbv.cbv_decorators import is_projectmanager_or_member_or_perms @method_decorator(login_required, name="dispatch") diff --git a/project/cbv/project_stage.py b/project/cbv/project_stage.py index b06d31c1f..9d909d630 100644 --- a/project/cbv/project_stage.py +++ b/project/cbv/project_stage.py @@ -4,10 +4,12 @@ import logging from typing import Any + +from django.contrib import messages from django.http import HttpResponse -from django.utils.translation import gettext_lazy as _ from django.utils.decorators import method_decorator -from django.contrib import messages +from django.utils.translation import gettext_lazy as _ + from horilla_views.cbv_methods import login_required from horilla_views.generic.cbv.views import HorillaFormView diff --git a/project/cbv/projects.py b/project/cbv/projects.py index 2a765c643..2ddac6f0a 100644 --- a/project/cbv/projects.py +++ b/project/cbv/projects.py @@ -3,13 +3,17 @@ """ from typing import Any + +from django.contrib import messages +from django.db.models import Q from django.http import HttpResponse -from django.utils.translation import gettext_lazy as _ -from django.utils.decorators import method_decorator from django.urls import reverse -from django.contrib import messages +from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView + from employee.models import Employee +from horilla.horilla_middlewares import _thread_locals from horilla_views.cbv_methods import login_required, permission_required from horilla_views.generic.cbv.views import ( HorillaCardView, @@ -21,10 +25,13 @@ from project.cbv.cbv_decorators import is_projectmanager_or_member_or_perms from project.filters import ProjectFilter from project.forms import ProjectForm -from project.methods import any_project_manager, any_project_member, is_project_manager_or_super_user, you_dont_have_permission +from project.methods import ( + any_project_manager, + any_project_member, + is_project_manager_or_super_user, + you_dont_have_permission, +) from project.models import Project -from django.db.models import Q -from horilla.horilla_middlewares import _thread_locals @method_decorator(login_required, name="dispatch") @@ -49,6 +56,7 @@ class ProjectsNavView(HorillaNavView): """ template_name = "cbv/projects/project_nav.html" + def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("project-list-view") @@ -124,6 +132,7 @@ def __init__(self, **kwargs: Any) -> None: hx-target="#genericModalBody" hx-get="{reverse('create-project')}" """ + group_by_fields = [ ("status", _("Status")), ("is_active", _("Is active")), @@ -149,20 +158,16 @@ def get_queryset(self): if not self.request.user.has_perm("project.view_project"): employee = self.request.user.employee_get task_filter = queryset.filter( - Q(task__task_members=employee) - | Q(task__task_managers=employee) - ) - project_filter = queryset.filter( - Q(managers=employee) - | Q(members=employee) + Q(task__task_members=employee) | Q(task__task_managers=employee) ) + project_filter = queryset.filter(Q(managers=employee) | Q(members=employee)) queryset = task_filter | project_filter return queryset.distinct() def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("project-list-view") - if (self.request.user.is_superuser ): + if self.request.user.is_superuser: self.action_method = "actions" model = Project @@ -203,7 +208,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_progress'); $('#applyFilter').click(); - + " """, ), @@ -214,7 +219,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), @@ -225,7 +230,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('on_hold'); $('#applyFilter').click(); - + " """, ), @@ -236,7 +241,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('cancelled'); $('#applyFilter').click(); - + " """, ), @@ -247,7 +252,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('expired'); $('#applyFilter').click(); - + " """, ), @@ -270,15 +275,12 @@ class ProjectFormView(HorillaFormView): form_class = ProjectForm model = Project new_display_title = _("Create Project") - + def __init__(self, **kwargs): super().__init__(**kwargs) user = self.request.user - - if (not user.is_superuser and - not user.has_perm("project.add_project") - - ): + + if not user.is_superuser and not user.has_perm("project.add_project"): self.template_name = "decorator_404.html" def get_context_data(self, **kwargs): @@ -295,7 +297,9 @@ def form_valid(self, form: ProjectForm) -> HttpResponse: if HTTP_REFERER and "task-view/" in HTTP_REFERER: form.save() messages.success(self.request, message) - return self.HttpResponse("") + return self.HttpResponse( + "" + ) else: message = _("New project created") form.save() @@ -326,32 +330,29 @@ def get_queryset(self): if not self.request.user.has_perm("project.view_project"): employee = self.request.user.employee_get task_filter = queryset.filter( - Q(task__task_members=employee) - | Q(task__task_managers=employee) - ) - project_filter = queryset.filter( - Q(managers=employee) - | Q(members=employee) + Q(task__task_members=employee) | Q(task__task_managers=employee) ) + project_filter = queryset.filter(Q(managers=employee) | Q(members=employee)) queryset = task_filter | project_filter return queryset.distinct() def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("project-card-view") - if (self.request.user.has_perm("project.change_project") + if ( + self.request.user.has_perm("project.change_project") or self.request.user.has_perm("project.delete_project") or any_project_manager(self.request.user) or any_project_member(self.request.user) - ): + ): self.actions = [ { "action": "Edit", "accessibility": "project.cbv.accessibility.project_manager_accessibility", "attrs": """ - hx-get='{get_update_url}' + hx-get='{get_update_url}' hx-target='#genericModalBody' - data-toggle="oh-modal-toggle" + data-toggle="oh-modal-toggle" data-target="#genericModal" class="oh-dropdown__link" """, @@ -372,7 +373,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" event.stopPropagation() deleteItem({get_delete_url}); - " + " class="oh-dropdown__link oh-dropdown__link--danger" """, }, @@ -403,7 +404,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_progress'); $('#applyFilter').click(); - + " """, ), @@ -414,7 +415,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), @@ -425,7 +426,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('on_hold'); $('#applyFilter').click(); - + " """, ), @@ -436,7 +437,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('cancelled'); $('#applyFilter').click(); - + " """, ), @@ -447,7 +448,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('expired'); $('#applyFilter').click(); - + " """, ), @@ -480,13 +481,14 @@ def __init__(self, **kwargs: Any) -> None: # context, # ) + class ProjectsTabView(ListView): model = Project template_name = "cbv/projects/project_tab.html" context_object_name = "projects" def get_queryset(self): - pk = self.kwargs.get('pk') + pk = self.kwargs.get("pk") queryset = Project.objects.filter( Q(manager=pk) | Q(members=pk) @@ -497,13 +499,14 @@ def get_queryset(self): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - pk = self.kwargs.get('pk') + pk = self.kwargs.get("pk") if pk: employees = Employee.objects.filter(id=pk).distinct() employee = employees.first() context["employee"] = employee return context + # Remove the command lines after horilla converted into CBV # from employee.cbv.employee_profile import EmployeeProfileView # EmployeeProfileView.add_tab( diff --git a/project/cbv/tasks.py b/project/cbv/tasks.py index e8efdeccb..c1a22c7fb 100644 --- a/project/cbv/tasks.py +++ b/project/cbv/tasks.py @@ -4,14 +4,16 @@ import logging from typing import Any + from django import forms +from django.contrib import messages from django.db.models import Q from django.http import HttpResponse -from django.contrib import messages from django.shortcuts import render -from django.utils.translation import gettext_lazy as _ from django.urls import reverse from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ + from base.methods import get_subordinates from horilla_views.cbv_methods import login_required from horilla_views.generic.cbv.views import ( @@ -19,8 +21,8 @@ HorillaDetailedView, HorillaFormView, HorillaListView, - TemplateView, HorillaNavView, + TemplateView, ) from project.cbv.project_stage import StageDynamicCreateForm from project.cbv.projects import DynamicProjectCreationFormView @@ -118,7 +120,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_progress'); $('#applyFilter').click(); - + " """, ), @@ -129,7 +131,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), @@ -140,7 +142,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('expired'); $('#applyFilter').click(); - + " """, ), @@ -455,7 +457,7 @@ def __init__(self, **kwargs: Any) -> None: "attrs": """ href="{get_archive_url}" onclick="return confirm('Do you want to {archive_status} this task?')" - class="oh-dropdown__link" + class="oh-dropdown__link" """, }, { @@ -465,7 +467,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" event.stopPropagation() deleteItem({get_delete_url}); - " + " class="oh-dropdown__link oh-dropdown__link--danger" """, }, @@ -525,7 +527,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_progress'); $('#applyFilter').click(); - + " """, ), @@ -536,7 +538,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), @@ -547,7 +549,7 @@ def get_queryset(self): onclick=" $('#applyFilter').closest('form').find('[name=status]').val('expired'); $('#applyFilter').click(); - + " """, ), diff --git a/project/cbv/timesheet.py b/project/cbv/timesheet.py index 1963f1e83..e4e2d7777 100644 --- a/project/cbv/timesheet.py +++ b/project/cbv/timesheet.py @@ -3,13 +3,16 @@ """ from typing import Any + from django import forms +from django.contrib import messages +from django.db.models import Q from django.http import HttpResponse from django.shortcuts import render -from django.utils.translation import gettext_lazy as _ -from django.utils.decorators import method_decorator from django.urls import resolve, reverse -from django.contrib import messages +from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ + from employee.models import Employee from horilla_views.cbv_methods import login_required from horilla_views.generic.cbv.views import ( @@ -26,7 +29,6 @@ from project.filters import TimeSheetFilter from project.forms import TimeSheetForm from project.models import Project, Task, TimeSheet -from django.db.models import Q @method_decorator(login_required, name="dispatch") @@ -49,8 +51,9 @@ class TimeSheetNavView(HorillaNavView): """ Nav bar """ + template_name = "cbv/timesheet/timesheet_nav.html" - + def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("time-sheet-list") @@ -93,7 +96,7 @@ def __init__(self, **kwargs: Any) -> None: """, }, ] - + self.create_attrs = f""" onclick = "event.stopPropagation();" data-toggle="oh-modal-toggle" @@ -101,12 +104,16 @@ def __init__(self, **kwargs: Any) -> None: hx-target="#genericModalBody" hx-get="{reverse('create-time-sheet')}" """ + group_by_fields = [ ("employee_id", _("Employee")), ("project_id", _("Project")), ("date", _("Date")), ("status", _("Status")), - ("employee_id__employee_work_info__reporting_manager_id", _("Reporting Manager")), + ( + "employee_id__employee_work_info__reporting_manager_id", + _("Reporting Manager"), + ), ("employee_id__employee_work_info__department_id", _("Department")), ("employee_id__employee_work_info__job_position_id", _("Job Position")), ("employee_id__employee_work_info__employee_type_id", _("Employement Type")), @@ -175,7 +182,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_Progress'); $('#applyFilter').click(); - + " """, ), @@ -186,7 +193,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), @@ -211,7 +218,6 @@ class TaskTimeSheet(TimeSheetList): row_status_indications = False bulk_select_option = False - def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.view_id = "task-timesheet-container" @@ -225,7 +231,7 @@ def get_context_data(self, **kwargs: Any): context = super().get_context_data(**kwargs) task_id = self.kwargs.get("task_id") task = Task.objects.get(id=task_id) - project = task.project + project = task.project context["task_id"] = task_id context["project"] = project context["task"] = task @@ -236,18 +242,19 @@ def get_context_data(self, **kwargs: Any): def get_queryset(self): queryset = HorillaListView.get_queryset(self) task_id = self.kwargs.get("task_id") - task = Task.objects.filter( id = task_id).first() + task = Task.objects.filter(id=task_id).first() queryset = TimeSheet.objects.filter(task_id=task_id) queryset = queryset.filter(task_id=task_id) employee_id = self.request.GET.get("employee_id") if employee_id: - employee = Employee.objects.filter(id = employee_id ).first() - if (not employee in task.task_managers.all() + employee = Employee.objects.filter(id=employee_id).first() + if ( + not employee in task.task_managers.all() and not employee in task.project.managers.all() and not employee.employee_user_id.is_superuser ): queryset = queryset.filter(employee_id=employee_id) - + return queryset @@ -294,7 +301,7 @@ def get_context_data(self, **kwargs): task = Task.objects.get(id=task_id) project = task.project employee = Employee.objects.filter(id=user_employee_id) - + if self.form.instance.pk: task_id = self.form.instance.task_id.id project = self.form.instance.project_id @@ -312,46 +319,54 @@ def get_context_data(self, **kwargs): self.form_class.verbose_name = _("Update Time Sheet") # If the timesheet create from task or project if project: - if (self.request.user.is_superuser or - self.request.user.has_perm("project.add_project") - ): - members = ( project.managers.all() | - project.members.all() | - task.task_members.all() |task.task_managers.all() - ).distinct() - elif ( employee.first() in project.managers.all()): + if self.request.user.is_superuser or self.request.user.has_perm( + "project.add_project" + ): members = ( - employee | project.members.all() | - task.task_members.all() | task.task_managers.all() + project.managers.all() + | project.members.all() + | task.task_members.all() + | task.task_managers.all() ).distinct() - elif( employee.first() in task.task_managers.all() ): - members = ( employee | task.task_members.all()).distinct() - else : + elif employee.first() in project.managers.all(): + members = ( + employee + | project.members.all() + | task.task_members.all() + | task.task_managers.all() + ).distinct() + elif employee.first() in task.task_managers.all(): + members = (employee | task.task_members.all()).distinct() + else: members = employee if task_id: self.form.fields["project_id"].widget = forms.HiddenInput() self.form.fields["task_id"].widget = forms.HiddenInput() self.form.fields["employee_id"].queryset = members - + # If the timesheet create directly - else : + else: employee = self.request.user.employee_get - if self.request.user.has_perm('project.add_timesheet'): + if self.request.user.has_perm("project.add_timesheet"): projects = Project.objects.all() else: projects = ( - Project.objects.filter(managers = employee) | - Project.objects.filter(members = employee) | - Project.objects.filter( - id__in=Task.objects.filter(task_managers=employee).values_list('project', flat=True) - ) | - Project.objects.filter( - id__in=Task.objects.filter(task_members=employee).values_list('project', flat=True) + Project.objects.filter(managers=employee) + | Project.objects.filter(members=employee) + | Project.objects.filter( + id__in=Task.objects.filter(task_managers=employee).values_list( + "project", flat=True + ) + ) + | Project.objects.filter( + id__in=Task.objects.filter(task_members=employee).values_list( + "project", flat=True + ) ) ).distinct() - self.form.fields['project_id'].queryset = projects + self.form.fields["project_id"].queryset = projects return context - + def form_valid(self, form: TimeSheetForm) -> HttpResponse: if form.is_valid(): if form.instance.pk: @@ -394,9 +409,9 @@ def __init__(self, **kwargs: Any) -> None: { "action": "Edit", "attrs": """ - hx-get='{get_update_url}' + hx-get='{get_update_url}' hx-target='#genericModalBody' - data-toggle="oh-modal-toggle" + data-toggle="oh-modal-toggle" data-target="#genericModal" class="oh-dropdown__link" """, @@ -407,7 +422,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" event.stopPropagation() deleteItem({get_delete_url}); - " + " class="oh-dropdown__link oh-dropdown__link--danger" """, }, @@ -429,7 +444,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('in_Progress'); $('#applyFilter').click(); - + " """, ), @@ -440,7 +455,7 @@ def __init__(self, **kwargs: Any) -> None: onclick=" $('#applyFilter').closest('form').find('[name=status]').val('completed'); $('#applyFilter').click(); - + " """, ), diff --git a/project/templates/cbv/projects/actions.html b/project/templates/cbv/projects/actions.html index af7a2d14c..9ccc5973a 100644 --- a/project/templates/cbv/projects/actions.html +++ b/project/templates/cbv/projects/actions.html @@ -34,7 +34,7 @@ {% endif %} {% if perms.project.delete_project or request.user|is_project_manager:instance %} {% if instance.is_active %} - {% else %} - {% endif %} - \ No newline at end of file + diff --git a/project/templates/cbv/projects/filter.html b/project/templates/cbv/projects/filter.html index c4e9d6fd6..6dc13c40f 100644 --- a/project/templates/cbv/projects/filter.html +++ b/project/templates/cbv/projects/filter.html @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/project/templates/cbv/projects/project_details.html b/project/templates/cbv/projects/project_details.html index f0848ad30..cd3385a15 100644 --- a/project/templates/cbv/projects/project_details.html +++ b/project/templates/cbv/projects/project_details.html @@ -10,7 +10,7 @@ {{project}} - + {% if perms.pms.change_project or request.user|is_project_manager_or_member:project %} + - + - -{% endblock %} \ No newline at end of file + +{% endblock %} diff --git a/project/templates/cbv/tasks/task_actions.html b/project/templates/cbv/tasks/task_actions.html index 358fe2e71..0fef6080e 100644 --- a/project/templates/cbv/tasks/task_actions.html +++ b/project/templates/cbv/tasks/task_actions.html @@ -48,4 +48,4 @@ {% endif %} - \ No newline at end of file + diff --git a/project/templates/cbv/tasks/task_detail_actions.html b/project/templates/cbv/tasks/task_detail_actions.html index 29fa8ea0a..0e6fe4d20 100644 --- a/project/templates/cbv/tasks/task_detail_actions.html +++ b/project/templates/cbv/tasks/task_detail_actions.html @@ -24,4 +24,4 @@ {% trans "Delete" %} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/project/templates/cbv/tasks/task_document.html b/project/templates/cbv/tasks/task_document.html index 77199de2b..cdf34b3f2 100644 --- a/project/templates/cbv/tasks/task_document.html +++ b/project/templates/cbv/tasks/task_document.html @@ -7,4 +7,4 @@ style="width:40px;height:40px"> -{% endif%} \ No newline at end of file +{% endif%} diff --git a/project/templates/cbv/tasks/task_filter.html b/project/templates/cbv/tasks/task_filter.html index 1caee1152..71e70840b 100644 --- a/project/templates/cbv/tasks/task_filter.html +++ b/project/templates/cbv/tasks/task_filter.html @@ -38,4 +38,4 @@ - \ No newline at end of file + diff --git a/project/templates/cbv/tasks/task_form.html b/project/templates/cbv/tasks/task_form.html index 52d45716d..151d117ac 100644 --- a/project/templates/cbv/tasks/task_form.html +++ b/project/templates/cbv/tasks/task_form.html @@ -6,4 +6,4 @@ {% include 'generic/horilla_form.html' %} - \ No newline at end of file + diff --git a/project/templates/cbv/tasks/task_template_view.html b/project/templates/cbv/tasks/task_template_view.html index 58741a064..86c45eb41 100644 --- a/project/templates/cbv/tasks/task_template_view.html +++ b/project/templates/cbv/tasks/task_template_view.html @@ -118,8 +118,8 @@ if (!$(event.target).closest('#enlargeattachmentContainer').length) { hideEnlargeattachment() } - }) + }) -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/project/templates/cbv/timesheet/detail_actions.html b/project/templates/cbv/timesheet/detail_actions.html index 06184cb7e..91e225568 100644 --- a/project/templates/cbv/timesheet/detail_actions.html +++ b/project/templates/cbv/timesheet/detail_actions.html @@ -20,4 +20,4 @@ {% trans "Delete" %} - \ No newline at end of file + diff --git a/project/templates/cbv/timesheet/employee_field.html b/project/templates/cbv/timesheet/employee_field.html index 2237c4fe0..9101bba3c 100644 --- a/project/templates/cbv/timesheet/employee_field.html +++ b/project/templates/cbv/timesheet/employee_field.html @@ -26,4 +26,4 @@ $(buttonId).click(); } - \ No newline at end of file + diff --git a/project/templates/cbv/timesheet/filter.html b/project/templates/cbv/timesheet/filter.html index 99bf91c24..ac9e1e3d0 100644 --- a/project/templates/cbv/timesheet/filter.html +++ b/project/templates/cbv/timesheet/filter.html @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/project/templates/cbv/timesheet/task_field.html b/project/templates/cbv/timesheet/task_field.html index 624a26372..e61c27afa 100644 --- a/project/templates/cbv/timesheet/task_field.html +++ b/project/templates/cbv/timesheet/task_field.html @@ -12,4 +12,4 @@ $(this).closest("select")[0].dispatchEvent(new Event("change")); }); }); - \ No newline at end of file + diff --git a/project/templates/cbv/timesheet/task_timesheet.html b/project/templates/cbv/timesheet/task_timesheet.html index 13b6c9cd9..b9c5476a7 100644 --- a/project/templates/cbv/timesheet/task_timesheet.html +++ b/project/templates/cbv/timesheet/task_timesheet.html @@ -34,4 +34,4 @@
{% trans "Time sheet" %}
{% include "generic/horilla_list_table.html" %} - \ No newline at end of file + diff --git a/project/templates/cbv/timesheet/timesheet.html b/project/templates/cbv/timesheet/timesheet.html index e78af7256..51bdea458 100644 --- a/project/templates/cbv/timesheet/timesheet.html +++ b/project/templates/cbv/timesheet/timesheet.html @@ -1,51 +1,51 @@ -{% extends "index.html" %} -{% load i18n %}{% load static %} - - -{% block content %} - - - - - -
-
- - -{% include "generic/components.html" %} - - - - - -
-
-
- - -{% endblock %} \ No newline at end of file +{% extends "index.html" %} +{% load i18n %}{% load static %} + + +{% block content %} + + + + + +
+
+ + +{% include "generic/components.html" %} + + + + + +
+
+
+ + +{% endblock %} diff --git a/project/templates/cbv/timesheet/timesheet_nav.html b/project/templates/cbv/timesheet/timesheet_nav.html index 8b0073d34..9a96bb976 100644 --- a/project/templates/cbv/timesheet/timesheet_nav.html +++ b/project/templates/cbv/timesheet/timesheet_nav.html @@ -5,4 +5,4 @@ \ No newline at end of file + diff --git a/project/templates/task/new/forms/quick_create_task_form.html b/project/templates/task/new/forms/quick_create_task_form.html index 70ef7c8f7..c0047fa5e 100644 --- a/project/templates/task/new/forms/quick_create_task_form.html +++ b/project/templates/task/new/forms/quick_create_task_form.html @@ -23,4 +23,4 @@ $(this).closest('.list-quick-add').toggleClass('d-none'); }); }); - \ No newline at end of file + diff --git a/project/templates/task/new/task_card_view.html b/project/templates/task/new/task_card_view.html index 2a0e38c5f..e1f76e83b 100644 --- a/project/templates/task/new/task_card_view.html +++ b/project/templates/task/new/task_card_view.html @@ -9,7 +9,7 @@ {% for message in messages %}
{{ message }} -
+ {% endfor %} {% endif %} @@ -29,15 +29,15 @@ class="oh-kanban__section stages" data-container='stages' id="kanban{{stage.id}}" - + data-project-id = "{{project.id}}" > -
- {{stage.title}} + {{stage.title}}
@@ -45,21 +45,21 @@
{% comment %} drop down menu {% endcomment %} -
+
- +
- + @@ -67,14 +67,14 @@
-
+
{% comment %} task inside stage {% endcomment %} -
@@ -105,11 +105,11 @@ data-task="{{task.title}}" id="task-{{task.id}}" style="cursor: pointer;overflow: visible;left-padding:10px" - > + > - +
- + {{task}} {{task.task_manager}}
@@ -132,10 +132,10 @@
- + {% comment %} drop down inside card {% endcomment %} - +
- + {% endif %} - {% endfor %} + {% endfor %} {% endfor %} - + {% comment %} {% trans "Stage" %} {% endcomment %} - + - - + + {% else %}
@@ -201,9 +201,7 @@

{% trans "There are currentl

{% endif %} - + {% comment %} js files {% endcomment %} - - diff --git a/project/templatetags/taskfilters.py b/project/templatetags/taskfilters.py index b778c49b0..4e5e8f70a 100644 --- a/project/templatetags/taskfilters.py +++ b/project/templatetags/taskfilters.py @@ -1,66 +1,65 @@ """ This module is used to write custom template filters. """ + from django.template.defaultfilters import register from project.models import Project + @register.filter(name="task_crud_perm") -def task_crud_perm(user,task): +def task_crud_perm(user, task): """ This method is used to check the requested user is task manager or project manager or has permission """ try: employee = user.employee_get - is_task_manager = (employee in task.task_managers.all()) - is_project_manager = (employee in task.project.managers.all()) + is_task_manager = employee in task.task_managers.all() + is_project_manager = employee in task.project.managers.all() return is_task_manager or is_project_manager - + except Exception as _: return False @register.filter(name="time_sheet_crud_perm") -def time_sheet_crud_perm(user,timesheet): +def time_sheet_crud_perm(user, timesheet): """ This method is used to check the requested user is task manager or project manager or has permission """ try: employee = user.employee_get - is_task_manager = (employee in timesheet.task_id.task_managers.all()) - is_project_manager = (employee in timesheet.project_id.managers.all()) - is_own_timesheet = (timesheet.employee_id == employee ) + is_task_manager = employee in timesheet.task_id.task_managers.all() + is_project_manager = employee in timesheet.project_id.managers.all() + is_own_timesheet = timesheet.employee_id == employee return is_task_manager or is_project_manager or is_own_timesheet - + except Exception as _: return False @register.filter(name="is_project_manager_or_member") -def is_project_manager_or_member(user,project): +def is_project_manager_or_member(user, project): """ This method will return true, if the user is manger or member of the project """ employee = user.employee_get - + return ( - Project.objects.filter( - id=project.id, managers=employee - ).exists() - or Project.objects.filter( - id=project.id, members=employee - ).exists() + Project.objects.filter(id=project.id, managers=employee).exists() + or Project.objects.filter(id=project.id, members=employee).exists() ) @register.filter(name="is_project_manager") -def is_project_manager(user,project): +def is_project_manager(user, project): """ This method will return true, if the user is manager of the project """ employee = user.employee_get - return Project.objects.filter(id=project.id,managers=employee).exists() + return Project.objects.filter(id=project.id, managers=employee).exists() + @register.filter(name="is_task_manager") def is_task_manager(user, task): @@ -68,8 +67,8 @@ def is_task_manager(user, task): This method will return True if the user is a manager of the task. """ try: - employee = user.employee_get + employee = user.employee_get return employee in task.task_managers.all() except AttributeError: # Handle cases where user or task might not have the expected structure - return False \ No newline at end of file + return False