from django.utils.translation import gettext_lazy as _
from shuup.admin.base import AdminModule, MenuEntry, SearchResult
from shuup.admin.dashboard import DashboardContentBlock
from shuup.admin.menu import CONTACTS_MENU_CATEGORY
from shuup.admin.shop_provider import get_shop
from shuup.admin.utils.urls import admin_url, derive_model_url, get_edit_and_list_urls, get_model_url
from shuup.core.models import get_person_contact
from shuup.tasks.models import Task, TaskStatus, TaskType
from shuup.utils.django_compat import force_text
[docs]
class TaskAdminModule(AdminModule):
name = _("Tasks")
breadcrumbs_menu_entry = MenuEntry(name, "shuup_admin:task.list")
[docs]
def get_urls(self):
return get_edit_and_list_urls(
url_prefix="^tasks",
view_template="shuup.tasks.admin_module.views.Task%sView",
name_template="task.%s",
) + [
admin_url(
r"^tasks/(?P<pk>\d+)/delete/$",
"shuup.tasks.admin_module.views.TaskDeleteView",
name="task.delete",
),
admin_url(
r"^tasks/(?P<pk>\d+)/set_status/$",
"shuup.tasks.admin_module.views.TaskSetStatusView",
name="task.set_status",
),
]
[docs]
def get_model_url(self, object, kind, shop=None):
return derive_model_url(Task, "shuup_admin:task", object, kind)
[docs]
def get_dashboard_blocks(self, request):
"""Return the latest 10 pending tasks"""
contact = get_person_contact(request.user)
tasks = (
Task.objects.for_shop(get_shop(request))
.assigned_to(contact)
.exclude(status__in=(TaskStatus.DELETED, TaskStatus.COMPLETED))
.order_by("-priority")
)[:10]
if tasks.exists():
tasks_block = DashboardContentBlock.by_rendering_template(
"articles",
request,
"shuup/admin/tasks/tasks_dashboard_block.jinja",
context={"tasks": tasks},
)
tasks_block.size = "medium"
yield tasks_block
[docs]
def get_search_results(self, request, query):
shop = get_shop(request)
if len(query) >= 3:
contact = get_person_contact(request.user)
tasks = (
Task.objects.for_shop(get_shop(request))
.filter(name__icontains=query)
.assigned_to(contact)
.exclude(status__in=(TaskStatus.DELETED, TaskStatus.COMPLETED))
)
for task in tasks:
yield SearchResult(
text=force_text(
"{task_name} [{task_status}]".format(**{"task_name": task.name, "task_status": task.status})
),
url=get_model_url(task, shop=shop),
category=_("Tasks"),
)
[docs]
class TaskTypeAdminModule(AdminModule):
name = _("Task Types")
breadcrumbs_menu_entry = MenuEntry(name, "shuup_admin:task_type.list")
[docs]
def get_urls(self):
return get_edit_and_list_urls(
url_prefix="^task_type",
view_template="shuup.tasks.admin_module.views.TaskType%sView",
name_template="task_type.%s",
)
[docs]
def get_model_url(self, object, kind, shop=None):
return derive_model_url(TaskType, "shuup_admin:task_type", object, kind)