Merge pull request '#99 Admin backend cleanup' (#102) from 99_Admin_backend_cleanup_and_convenience into master

Reviewed-on: SGD-Nord/konova#102
pull/103/head
mpeltriaux 3 years ago
commit de3f96d4a8

@ -12,5 +12,9 @@ class APITokenAdmin(admin.ModelAdmin):
readonly_fields = [
"token"
]
search_fields = [
"token"
]
admin.site.register(APIUserToken, APITokenAdmin)

@ -35,6 +35,13 @@ class KonovaCodeAdmin(admin.ModelAdmin):
"parent",
]
search_fields = [
"id",
"atom_id",
"long_name",
"short_name",
]
#admin.site.register(KonovaCodeList, KonovaCodeListAdmin)
admin.site.register(KonovaCode, KonovaCodeAdmin)

@ -2,28 +2,48 @@ from django.contrib import admin
from compensation.models import Compensation, CompensationAction, CompensationState, Payment, \
EcoAccountDeduction, EcoAccount
from konova.admin import BaseObjectAdmin
from konova.admin import BaseObjectAdmin, BaseResourceAdmin
class CompensationStateAdmin(admin.ModelAdmin):
class AbstractCompensationAdmin(BaseObjectAdmin):
list_display = [
"id",
"biotope_type",
"surface",
"identifier",
"title",
"created",
"deleted",
]
class CompensationActionAdmin(admin.ModelAdmin):
list_display = [
"id",
"action_type",
"amount",
"unit",
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"identifier",
"title",
"comment",
"after_states",
"before_states",
]
def get_readonly_fields(self, request, obj=None):
return super().get_readonly_fields(request, obj) + [
"after_states",
"before_states",
]
class CompensationAdmin(BaseObjectAdmin):
class CompensationAdmin(AbstractCompensationAdmin):
autocomplete_fields = [
"intervention",
]
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"is_cef",
"is_coherence_keeping",
"intervention",
]
class EcoAccountAdmin(AbstractCompensationAdmin):
list_display = [
"id",
"identifier",
@ -32,12 +52,14 @@ class CompensationAdmin(BaseObjectAdmin):
"deleted",
]
filter_horizontal = [
"users"
]
class EcoAccountAdmin(admin.ModelAdmin):
list_display = [
"id",
"identifier",
"title",
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"deductable_surface",
"users"
]
@ -49,18 +71,56 @@ class PaymentAdmin(admin.ModelAdmin):
]
class EcoAccountDeductionAdmin(admin.ModelAdmin):
class EcoAccountDeductionAdmin(BaseResourceAdmin):
list_display = [
"id",
"account",
"intervention",
"surface",
]
search_fields = [
"account__identifier",
"account__title",
"intervention__identifier",
"intervention__title",
"surface",
]
autocomplete_fields = [
"account",
"intervention",
]
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"account",
"intervention",
"surface",
]
class CompensationStateAdmin(admin.ModelAdmin):
list_display = [
"id",
"biotope_type",
"surface",
]
class CompensationActionAdmin(admin.ModelAdmin):
list_display = [
"id",
"action_type",
"amount",
"unit",
"comment",
]
admin.site.register(Compensation, CompensationAdmin)
admin.site.register(Payment, PaymentAdmin)
admin.site.register(CompensationAction, CompensationActionAdmin)
admin.site.register(CompensationState, CompensationStateAdmin)
admin.site.register(EcoAccount, EcoAccountAdmin)
admin.site.register(EcoAccountDeduction, EcoAccountDeductionAdmin)
# For a more cleaner admin interface these rarely used admin views are not important for deployment
#admin.site.register(Payment, PaymentAdmin)
#admin.site.register(CompensationAction, CompensationActionAdmin)
#admin.site.register(CompensationState, CompensationStateAdmin)

@ -59,7 +59,7 @@ class CompensationAction(BaseResource):
objects = CompensationActionManager()
def __str__(self):
return "{} | {} {}".format(self.action_type, self.amount, self.unit)
return f"{self.action_type} | {self.amount} {self.unit}"
@property
def unit_humanize(self):

@ -46,7 +46,7 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
objects = EcoAccountManager()
def __str__(self):
return "{}".format(self.identifier)
return f"{self.identifier} ({self.title})"
def clean(self):
# Deductable surface can not be larger than added states after surface

@ -44,4 +44,4 @@ class CompensationState(UuidModel):
objects = CompensationStateManager()
def __str__(self):
return "{} | {}".format(self.biotope_type, self.surface)
return f"{self.biotope_type} | {self.surface}"

@ -1,10 +1,17 @@
from django.contrib import admin
from compensation.admin import CompensationAdmin
from compensation.admin import AbstractCompensationAdmin
from ema.models import Ema
class EmaAdmin(CompensationAdmin):
pass
class EmaAdmin(AbstractCompensationAdmin):
filter_horizontal = [
"users"
]
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"users"
]
admin.site.register(Ema, EmaAdmin)

@ -13,6 +13,26 @@ class InterventionAdmin(BaseObjectAdmin):
"deleted",
]
filter_horizontal = [
"users"
]
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + [
"identifier",
"title",
"comment",
"checked",
"recorded",
"users",
]
def get_readonly_fields(self, request, obj=None):
return super().get_readonly_fields(request, obj) + [
"checked",
"recorded",
]
class InterventionDocumentAdmin(AbstractDocumentAdmin):
pass
@ -48,7 +68,9 @@ class RevocationAdmin(admin.ModelAdmin):
admin.site.register(Intervention, InterventionAdmin)
admin.site.register(Responsibility, ResponsibilityAdmin)
admin.site.register(Legal, LegalAdmin)
admin.site.register(Revocation, RevocationAdmin)
admin.site.register(InterventionDocument, InterventionDocumentAdmin)
# Outcommented for a cleaner admin backend on production
#admin.site.register(Responsibility, ResponsibilityAdmin)
#admin.site.register(Legal, LegalAdmin)
#admin.site.register(Revocation, RevocationAdmin)
#admin.site.register(InterventionDocument, InterventionDocumentAdmin)

@ -51,7 +51,7 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
objects = InterventionManager()
def __str__(self):
return "{} ({})".format(self.identifier, self.title)
return f"{self.identifier} ({self.title})"
def save(self, *args, **kwargs):
""" Custom save functionality

@ -62,16 +62,35 @@ class DeadlineAdmin(admin.ModelAdmin):
]
class BaseObjectAdmin(admin.ModelAdmin):
class BaseResourceAdmin(admin.ModelAdmin):
fields = [
"created",
"modified",
]
readonly_fields = [
"modified",
"deleted",
"created",
]
admin.site.register(Geometry, GeometryAdmin)
admin.site.register(Parcel, ParcelAdmin)
admin.site.register(District, DistrictAdmin)
admin.site.register(GeometryConflict, GeometryConflictAdmin)
admin.site.register(Deadline, DeadlineAdmin)
class BaseObjectAdmin(BaseResourceAdmin):
search_fields = [
"identifier",
"title",
]
def get_fields(self, request, obj=None):
return super().get_fields(request, obj) + ["deleted"]
def get_readonly_fields(self, request, obj=None):
return super().get_readonly_fields(request, obj) + [
"deleted",
]
# Outcommented for a cleaner admin backend on production
#admin.site.register(Geometry, GeometryAdmin)
#admin.site.register(Parcel, ParcelAdmin)
#admin.site.register(District, DistrictAdmin)
#admin.site.register(GeometryConflict, GeometryConflictAdmin)
#admin.site.register(Deadline, DeadlineAdmin)

@ -4,11 +4,23 @@ from news.models import ServerMessage
class ServerMessageAdmin(admin.ModelAdmin):
readonly_fields = [
"modified",
"created",
]
list_display = [
"id",
"subject",
"publish_on",
"is_active",
]
search_fields = [
"subject"
]
def save_model(self, request, obj, form, change):
obj.save(user=request.user)
admin.site.register(ServerMessage, ServerMessageAdmin)

@ -2,6 +2,7 @@ from django.db import models
from django.utils.translation import gettext_lazy as _
from konova.models import BaseResource
from user.models import UserActionLogEntry
class ServerMessageImportance(models.TextChoices):
@ -23,3 +24,13 @@ class ServerMessage(BaseResource):
publish_on = models.DateTimeField()
unpublish_on = models.DateTimeField()
importance = models.CharField(max_length=100, choices=ServerMessageImportance.choices)
def save(self, user=None, *args, **kwargs):
user = kwargs.pop("user", None)
if user is not None:
if self.created is None:
self.created = UserActionLogEntry.get_created_action(user)
else:
self.modified = UserActionLogEntry.get_edited_action(user)
super().save(*args, **kwargs)

@ -19,6 +19,40 @@ class UserAdmin(admin.ModelAdmin):
"last_name",
"email",
]
fields = [
"username",
"first_name",
"last_name",
"email",
"is_active",
"is_staff",
"is_superuser",
"api_token",
"groups",
"notifications",
"date_joined",
"last_login",
]
search_fields = [
"username",
"first_name",
"last_name",
"email",
]
filter_horizontal = [
"groups",
"notifications",
]
readonly_fields = [
"date_joined",
"last_login",
]
autocomplete_fields = [
"api_token",
]
exclude = [
"user_permissions",
]
class UserActionLogEntryAdmin(admin.ModelAdmin):
@ -30,6 +64,8 @@ class UserActionLogEntryAdmin(admin.ModelAdmin):
]
admin.site.register(UserNotification, UserNotificationAdmin)
admin.site.register(UserActionLogEntry, UserActionLogEntryAdmin)
admin.site.register(User, UserAdmin)
# Outcommented for a cleaner admin backend on production
#admin.site.register(UserNotification, UserNotificationAdmin)
#admin.site.register(UserActionLogEntry, UserActionLogEntryAdmin)

@ -10,6 +10,8 @@ import uuid
from django.db import models
from django.utils.translation import gettext_lazy as _
from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT, DEFAULT_DATE_TIME_FORMAT
class UserAction(models.TextChoices):
"""
@ -49,6 +51,9 @@ class UserActionLogEntry(models.Model):
"-timestamp",
)
def __str__(self):
return f"{self.timestamp.strftime(DEFAULT_DATE_TIME_FORMAT)} | {self.action} | {self.user}"
@property
def action_humanize(self):
""" Returns humanized version of enum

Loading…
Cancel
Save