Skip to content
Snippets Groups Projects
Commit f4903b0d authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

finish admin theme, working on simple button navigation

parent 3e6b6d02
No related branches found
No related tags found
No related merge requests found
from admin_extra_buttons.api import ExtraButtonsMixin, button
from admin_extra_buttons.utils import HttpResponseRedirectToReferrer
from dal_admin_filters import AutocompleteFilter from dal_admin_filters import AutocompleteFilter
from django.contrib import admin from django.contrib import admin
from django.utils.html import format_html from django.utils.html import format_html
...@@ -73,7 +75,7 @@ class ContractIntentInline(admin.TabularInline): ...@@ -73,7 +75,7 @@ class ContractIntentInline(admin.TabularInline):
extra = 0 extra = 0
class ContractAdmin(MarkdownxGuardedModelAdmin): class ContractAdmin(ExtraButtonsMixin, MarkdownxGuardedModelAdmin):
form = ContractAdminForm form = ContractAdminForm
readonly_fields = ("created_by",) readonly_fields = ("created_by",)
...@@ -85,6 +87,22 @@ class ContractAdmin(MarkdownxGuardedModelAdmin): ...@@ -85,6 +87,22 @@ class ContractAdmin(MarkdownxGuardedModelAdmin):
ContractIntentInline, ContractIntentInline,
) )
@button(
permission="contracts.approve",
label="Schválit",
change_form=True,
html_attrs={
"style": "background-color:var(--admin-interface-save-button-background-color);"
"color:var(--admin-interface-save-button-text-color)"
}
)
def approve(self, request):
self.message_user(request, "Smlouva schválena.")
return HttpResponseRedirectToReferrer(request)
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
fieldsets = [ fieldsets = [
( (
......
...@@ -50,19 +50,20 @@ INSTALLED_APPS = [ ...@@ -50,19 +50,20 @@ INSTALLED_APPS = [
"dal_admin_filters", "dal_admin_filters",
"django_admin_index", "django_admin_index",
"ordered_model", "ordered_model",
"shared",
"django.contrib.admin", "django.contrib.admin",
"django.contrib.auth", "django.contrib.auth",
"django.contrib.contenttypes", "django.contrib.contenttypes",
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"admin_extra_buttons",
"import_export", "import_export",
"rangefilter", "rangefilter",
"guardian", "guardian",
"markdownx", "markdownx",
"pirates", "pirates",
"webpack_loader", "webpack_loader",
"shared",
"contracts", "contracts",
"oidc", "oidc",
"users", "users",
...@@ -86,7 +87,7 @@ TEMPLATES = [ ...@@ -86,7 +87,7 @@ TEMPLATES = [
{ {
"BACKEND": "django.template.backends.django.DjangoTemplates", "BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [ "DIRS": [
os.path.join(BASE_DIR, "registry") os.path.join(BASE_DIR, "registry", "templates")
], ],
"APP_DIRS": True, "APP_DIRS": True,
"OPTIONS": { "OPTIONS": {
......
{% extends 'admin/base.html' %}
{% block extrastyle %}{{ block.super }}
<style>
:root {
--djai-tab-bg: #ff0080;
--djai-tab-bg--hover: #a91b60;
}
</style>
{% endblock %}
{% extends 'admin/base_site.html' %}
{% block extrastyle %}{{ block.super }}
<style>
:root {
--djai-tab-bg: #000 !important;
--djai-tab-bg--active: #424242 !important;
--djai-tab-bg--hover: #424242 !important;
--djai-dropdown-bg: #424242 !important;
--djai-dropdown-bg--active: #5e5e5e !important;
--djai-dropdown-bg--hover: #5e5e5e !important;
}
.index-action-buttons {
display: flex;
flex-direction: row;
row-gap: 10px;
}
.index-action-buttons button,
.index-action-buttons [aria-role="button"],
.index-action-buttons button:visited,
.index-action-buttons [aria-role="button"]:visited,
.index-action-buttons button:hover,
.index-action-buttons [aria-role="button"]:hover {
padding: 10px 15px;
margin-bottom: 15px;
background-color: var(--admin-interface-module-background-color) !important;
color: var(--admin-interface-module-text-color) !important;
border-radius: var(--admin-interface-module-border-radius) !important;
text-decoration: none !important;
}
</style>
{% endblock %}
{% extends "admin/index.html" %}
{% block content %}
{% if request.user.can_approve_contracts %}
<div class="index-action-buttons">
<a
href="contracts/contract/?approval_state__exact=no"
aria-role="button"
>Smlouvy ke schválení ({{ request.user.contracts_to_approve_count }})</a>
</div>
{% endif %}
{{ block.super }}
{% endblock %}
dal-admin-filters==1.1.0 dal-admin-filters==1.1.0
django==4.1.4 django==4.1.4
django-admin-extra-buttons==1.5.6
django-admin-index==2.0.2 django-admin-index==2.0.2
django-admin-interface==0.24.2 django-admin-interface==0.24.2
django-admin-rangefilter==0.9.0 django-admin-rangefilter==0.9.0
......
...@@ -14,6 +14,22 @@ class User(pirates_models.AbstractUser): ...@@ -14,6 +14,22 @@ class User(pirates_models.AbstractUser):
return f"{first_name}{self.last_name}" return f"{first_name}{self.last_name}"
@property
def can_approve_contracts(self) -> bool:
# TODO: Do we need the superuser check?
return self.is_superuser or self.has_perm("contracts.approve")
@property
def contracts_to_approve_count(self) -> int:
if not self.can_approve_contracts:
return 0
from contracts.models import Contract
return Contract.objects.filter(
approval_state=Contract.ApprovalStates.NO
).count()
class Meta: class Meta:
app_label = "users" app_label = "users"
verbose_name = "Uživatel" verbose_name = "Uživatel"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment