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

wip - app ordering

parent 006c7f5e
Branches
No related tags found
No related merge requests found
from dal_admin_filters import AutocompleteFilter
from django.contrib import admin
from django.utils.html import format_html
from fieldsets_with_inlines import FieldsetsInlineMixin
from import_export import resources
from rangefilter.filters import DateRangeFilter
......@@ -84,20 +85,11 @@ class ContractSigneeRepresentativeInline(admin.TabularInline):
extra = 0
class ContractAdmin(MarkdownxGuardedModelAdmin):
class ContractAdmin(FieldsetsInlineMixin, MarkdownxGuardedModelAdmin):
form = ContractAdminForm
readonly_fields = ("created_by",)
inlines = (
ContracteeSignatureInline,
SigneeSignatureInline,
ContractFileInline,
ContractIntentInline,
ContractContracteeRepresentativeInline,
ContractSigneeRepresentativeInline,
)
#def __init__(self, *args, **kwargs):
#from .models import Contract
......@@ -110,73 +102,83 @@ class ContractAdmin(MarkdownxGuardedModelAdmin):
#.filter(contract=self.instance)
#)
def get_fieldsets(self, request, obj=None):
fieldsets = [
(
"Základní informace",
{
"fields": [
"name",
"id_number",
"types",
"summary",
"public_state",
"publishing_rejection_comment",
"legal_state",
"primary_contract",
]
}
),
(
"Data",
{
"fields": [
"valid_start_date",
"valid_end_date",
]
}
),
(
"Fyzický dokument",
{
"fields": [
"paper_form_state",
"filing_area",
]
}
),
(
"Odkazy",
{
"fields": [
"tender_url",
"agreement_url",
]
}
),
(
"Náklady",
{
"fields": [
"cost_amount",
"cost_unit",
]
}
),
(
"Doplňující informace",
{
"fields": [
"issues",
"notes",
]
}
)
]
fieldsets_with_inlines = [
(
"Základní informace",
{
"fields": [
"name",
"id_number",
"types",
"summary",
"public_state",
"publishing_rejection_comment",
"legal_state",
"primary_contract",
]
}
),
(
"Data",
{
"fields": [
"valid_start_date",
"valid_end_date",
]
}
),
(
"Náklady",
{
"fields": [
"cost_amount",
"cost_unit",
]
}
),
ContractFileInline,
ContracteeSignatureInline,
ContractContracteeRepresentativeInline,
SigneeSignatureInline,
ContractSigneeRepresentativeInline,
(
"Odkazy",
{
"fields": [
"tender_url",
"agreement_url",
]
}
),
ContractIntentInline,
(
"Fyzický dokument",
{
"fields": [
"paper_form_state",
"filing_area",
]
}
),
(
"Doplňující informace",
{
"fields": [
"issues",
"notes",
]
}
)
]
def get_fieldsets(self, request, obj=None):
if request.user.is_superuser or request.user.has_perm("approve", self):
fieldsets.insert(
0,
self.fieldsets_with_inlines.insert(
8,
(
"Schválení",
{
......@@ -184,8 +186,8 @@ class ContractAdmin(MarkdownxGuardedModelAdmin):
}
),
)
return fieldsets
return super().get_fieldsets(request, obj)
def save_model(self, request, obj, form, change) -> None:
if obj.created_by is None:
......@@ -269,7 +271,6 @@ for model in (
ContracteeSignature,
ContractSigneeRepresentative,
ContractContracteeRepresentative,
ContractType,
ContractIntent,
):
admin.site.register(model, IndexHiddenModelAdmin)
......@@ -278,8 +279,9 @@ admin.site.register(ContractFile, ContractFileAdmin)
for model in (
Contractee,
ContractIssue,
ContractFilingArea,
ContractIssue,
ContractType,
):
admin.site.register(model, MarkdownxGuardedModelAdmin)
......
......@@ -196,7 +196,7 @@ class ContractType(NameStrMixin, models.Model):
app_label = "contracts"
verbose_name = "Typ smlouvy"
verbose_name_plural = "Typy smlouvy"
verbose_name_plural = "Typy smluv"
class ContractIssue(NameStrMixin, models.Model):
......@@ -504,8 +504,8 @@ class ContractSigneeRepresentative(RepresentativeMixin, models.Model):
class Meta:
app_label = "contracts"
verbose_name = "Zástupce druhé smluvní strany"
verbose_name_plural = "Zástupci druhé smluvní strany"
verbose_name = "Zástupce jiné smluvní strany"
verbose_name_plural = "Zástupci jiných smluvních stran"
class ContractFile(NameStrMixin, models.Model):
......@@ -565,7 +565,7 @@ class ContracteeSignature(models.Model):
verbose_name_plural = "Podpisy našich smluvních stran"
def __str__(self) -> str:
return f"{self.contractee.name} - {self.date}"
return f"{str(self.contractee)} - {self.date}"
class SigneeSignature(models.Model):
......@@ -591,10 +591,10 @@ class SigneeSignature(models.Model):
app_label = "contracts"
verbose_name = "Podpis jiné smluvní strany"
verbose_name_plural = "Podpisy ostatních smluvních stran"
verbose_name_plural = "Podpisy jiných smluvních stran"
def __str__(self) -> str:
return f"{self.signee.name} - {self.date}"
return f"{str(self.signee)} - {self.date}"
class ContractIntent(NameStrMixin, models.Model):
......
from django_admin_index.models import AppGroup, AppGroupQuerySet
from django.conf import settings
from django.contrib import admin
def get_app_list(self, request):
app_dict = self._build_app_dict(request)
for app_name, object_list in app_dict.items():
if app_name in settings.ADMIN_ORDERING:
app = app_dict[app_name]
app["models"].sort(
key=lambda model: settings.ADMIN_ORDERING[app_name].index(model["object_name"])
)
app_dict[app_name]
yield app
else:
yield app_dict[app_name]
admin.AdminSite.get_app_list = get_app_list
class CustomOrderAppGroupQuerySet(AppGroupQuerySet):
def as_list(self, request, include_remaining=True):
result = super().as_list(request, include_remaining=include_remaining)
for item in result:
if app_label not in settings.ADMIN_ORDERING:
continue
item["models"].sort(
key=lambda model: settings.ADMIN_ORDERING[app_name].index(model["name"])
)
return result
AppGroup.objects = AppGroupQuerySet.as_manager()
......@@ -206,6 +206,19 @@ ADMIN_INDEX_AUTO_CREATE_APP_GROUP = True
ADMIN_INDEX_SHOW_REMAINING_APPS = True
ADMIN_ORDERING = {
"contracts": [
"Contract",
"Signee",
"Contractee",
"ContractType",
"ContractIssue",
"ContractFilingArea",
],
}
## App-specific
DEFAULT_CONTRACTEE_NAME = env.str("DEFAULT_CONTRACTEE_NAME")
......
......@@ -70,5 +70,10 @@
border-radius: var(--admin-interface-module-border-radius) !important;
text-decoration: none !important;
}
.module caption, .inline-group h2 {
text-transform: none;
}
</style>
{% endblock %}
......@@ -20,6 +20,8 @@ from django.urls import include, path, re_path
from django.views.static import serve
from pirates.urls import urlpatterns as pirates_urlpatterns
import registry.admin
urlpatterns = [
path("", include("contracts.urls")),
path("", include("users.urls")),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment