From 0185be7fc173cb746e036889828e67ba6a719cd4 Mon Sep 17 00:00:00 2001 From: revelis-vincenzo Date: Thu, 12 Dec 2024 11:07:15 +0100 Subject: [PATCH 1/2] fix: cds admin --- cds/admin.py | 77 +++++++++++++++++++++++++++++++++++++++++++-------- cds/apps.py | 4 +-- cds/models.py | 14 ++++++++-- 3 files changed, 79 insertions(+), 16 deletions(-) diff --git a/cds/admin.py b/cds/admin.py index 2a6260d3..20a5ddeb 100644 --- a/cds/admin.py +++ b/cds/admin.py @@ -2,32 +2,85 @@ from .models import ( DidatticaCds, + DidatticaCdsCollegamento, DidatticaCdsLingua, DidatticaRegolamento, - DidatticaTestiRegolamento, ) @admin.register(DidatticaCds) class DidatticaCdsAdmin(admin.ModelAdmin): - readonly_fields = () - list_display = ("nome_cds_it", "dip") - search_fields = ("nome_cds_it",) + list_display = ("cds_id", "cds_cod", "nome_cds_it", "dip") + search_fields = ("nome_cds_it", "cds_cod") + list_display_links = ("cds_id",) + list_filter = ("tipo_corso_cod",) @admin.register(DidatticaCdsLingua) class DidatticaCdsLinguaAdmin(admin.ModelAdmin): - readonly_fields = () - list_display = () + @admin.display(description="CDS") + def cds(self, obj): + return f"{obj.cdsord.cds_cod} - {obj.cdsord.nome_cds_it}" + + @admin.display(description="ISO COD") + def iso_cod(self, obj): + return obj.iso6392_cod.upper() + + list_display = ("cds", "iso_cod") + list_display_links = ("cds",) + list_filter = ("iso6392_cod",) + search_fields = ( + "cdsord__nome_cds_it", + "cdsord__cds_cod", + ) + search_help_text = "Search by Cds Name or Cds Cod" @admin.register(DidatticaRegolamento) class DidatticaRegolamentoAdmin(admin.ModelAdmin): - readonly_fields = () - list_display = () + list_display = ("regdid_id", "aa_reg_did", "cds") + list_display_links = ("regdid_id",) + list_filter = ("cds__tipo_corso_cod",) + search_fields = ( + "cds__nome_cds_it", + "cds__cds_cod", + ) + search_help_text = "Search by Cds Name or Cds Cod" + +@admin.register(DidatticaCdsCollegamento) +class DidattiCdsCollegamentoAdmin(admin.ModelAdmin): + @admin.display(description="New CDS COD", ordering="cds__cds_cod") + def cds_cod(self, obj): + return obj.cds.cds_cod + + @admin.display(description="Previous CDS COD", ordering="cds_prec__cds_cod") + def cds_prec_cod(self, obj): + return obj.cds_prec.cds_cod + + @admin.display(description="New CDS Name", ordering="cds__nome_cds_it") + def cds_nome_cds_it(self, obj): + return obj.cds.nome_cds_it + @admin.display(description="Previous CDS Name", ordering="cds_prec__nome_cds_it") + def cds_prec_nome_cds_it(self, obj): + return obj.cds_prec.nome_cds_it -@admin.register(DidatticaTestiRegolamento) -class DidatticaTestiRegolamentoAdmin(admin.ModelAdmin): - readonly_fields = () - list_display = () + list_display = ( + "cds_cod", + "cds_nome_cds_it", + "cds_prec_cod", + "cds_prec_nome_cds_it", + ) + list_display_links = ( + "cds_cod", + "cds_prec_cod", + ) + search_fields = ( + "cds__nome_cds_it", + "cds_prec__nome_cds_it", + "cds__cds_cod", + "cds_prec__cds_cod", + ) + search_help_text = "Search by Cds Name or Cds Cod" + raw_id_fields = ("cds", "cds_prec") + list_select_related = ("cds", "cds_prec") diff --git a/cds/apps.py b/cds/apps.py index f4ec88c5..1ee15403 100644 --- a/cds/apps.py +++ b/cds/apps.py @@ -1,9 +1,9 @@ from django.apps import AppConfig - +from django.utils.translation import gettext_lazy as _ class CdsConfig(AppConfig): name = "cds" - verbose_name = "Courses of Study" + verbose_name = _("Courses of Study") def ready(self): from .management import signals # noqa: F401 diff --git a/cds/models.py b/cds/models.py index 39d971e4..115cbea5 100644 --- a/cds/models.py +++ b/cds/models.py @@ -1,5 +1,6 @@ from django.contrib.auth import get_user_model from django.db import models +from django.utils.translation import gettext_lazy as _ from generics.models import InsModAbstract, Permissions from generics.validators import validate_file_size, validate_pdf_file_extension from regdid.settings import ( @@ -39,6 +40,8 @@ class Meta: db_table = "DIDATTICA_CDS_COLLEGAMENTO" ordering = ["-cds__cds_cod"] unique_together = (("cds", "cds_prec"),) + verbose_name = "Cds Morph" + verbose_name_plural = verbose_name def __str__(self): return f"{self.cds.cds_cod}-{self.cds_prec.cds_cod}" @@ -430,9 +433,11 @@ class DidatticaCds(InsModAbstract): class Meta: managed = True db_table = "DIDATTICA_CDS" + verbose_name = "Cds" + verbose_name_plural = verbose_name def __str__(self): # pragma: no cover - return "{} {}".format(self.cds_id, self.nome_cds_it) + return "{} {}".format(self.cds_cod, self.nome_cds_it) class DidatticaCdsPeriodi(models.Model): @@ -530,9 +535,11 @@ class DidatticaCdsLingua(models.Model): class Meta: managed = True db_table = "DIDATTICA_CDS_LINGUA" + verbose_name = _("Cds Language") + verbose_name_plural = _("Cds Languages") def __str__(self): # pragma: no cover - return "{} {}".format(self.lin_did_ord_id, self.lingua_des_it) + return "{} {}".format(self.cdsord.cds_cod, self.lingua_des_it) class DidatticaCopertura(InsModAbstract): @@ -768,6 +775,9 @@ class Meta: managed = True db_table = "DIDATTICA_REGOLAMENTO" + verbose_name = _("Didactic Regulation") + verbose_name_plural = _("Didactic Regulations") + def get_ordinamento_didattico(self): # se è stato caricato un ordinamento per quest'anno, lo restituisco other_data = DidatticaCdsAltriDati.objects.filter(regdid_id=self).first() From 95d47c392fccf5f097fdfba8e6c1c4db41cdbf05 Mon Sep 17 00:00:00 2001 From: revelis-vincenzo Date: Thu, 12 Dec 2024 11:07:25 +0100 Subject: [PATCH 2/2] fix: translations --- locale/it/LC_MESSAGES/django.mo | Bin 70414 -> 70626 bytes locale/it/LC_MESSAGES/django.po | 221 +++++++++++++++++--------------- 2 files changed, 118 insertions(+), 103 deletions(-) diff --git a/locale/it/LC_MESSAGES/django.mo b/locale/it/LC_MESSAGES/django.mo index 046ef70fa2f8261acaba9aeebd9780c8c95ab186..37d30a72a0d67abb2b64321211ac6e69d3bb280c 100644 GIT binary patch delta 19182 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