From ae7d5b6a00779bee01f727ccdbe719233ef3fe86 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 25 Jun 2026 03:14:38 +0000 Subject: [PATCH] Add 'active' field to the ProjectCode model - Allows retiring of old project codes without deleting --- src/backend/InvenTree/common/admin.py | 3 ++- src/backend/InvenTree/common/api.py | 2 +- .../migrations/0045_projectcode_active.py | 22 +++++++++++++++++++ src/backend/InvenTree/common/models.py | 6 +++++ src/backend/InvenTree/common/serializers.py | 9 +++++++- 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 src/backend/InvenTree/common/migrations/0045_projectcode_active.py diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index e35d269f0b..44ac152760 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -115,7 +115,8 @@ class BarcodeScanResultAdmin(admin.ModelAdmin): class ProjectCodeAdmin(admin.ModelAdmin): """Admin settings for ProjectCode.""" - list_display = ('code', 'description') + list_display = ('code', 'description', 'active') + list_filter = ('active',) search_fields = ('code', 'description') diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index f2bec5e94b..f2a1a4c636 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -491,7 +491,7 @@ class ProjectCodeList(DataExportViewMixin, ListCreateAPI): filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['code'] - + filterset_fields = ['active'] search_fields = ['code', 'description'] diff --git a/src/backend/InvenTree/common/migrations/0045_projectcode_active.py b/src/backend/InvenTree/common/migrations/0045_projectcode_active.py new file mode 100644 index 0000000000..c0a8461972 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0045_projectcode_active.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.15 on 2026-06-25 03:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("common", "0044_notificationmessage_charfield_pk"), + ] + + operations = [ + migrations.AddField( + model_name="projectcode", + name="active", + field=models.BooleanField( + default=True, + help_text="Is this project code active?", + verbose_name="Active", + ), + ), + ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 3e903ac9d2..b07dd08eeb 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -181,6 +181,12 @@ class ProjectCode(InvenTree.models.InvenTreeMetadataModel): help_text=_('Project description'), ) + active = models.BooleanField( + default=True, + verbose_name=_('Active'), + help_text=_('Is this project code active?'), + ) + responsible = models.ForeignKey( users.models.Owner, on_delete=models.SET_NULL, diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 3c0ef9e859..f37e46e594 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -417,7 +417,14 @@ class ProjectCodeSerializer(DataImportExportSerializerMixin, InvenTreeModelSeria """Meta options for ProjectCodeSerializer.""" model = common_models.ProjectCode - fields = ['pk', 'code', 'description', 'responsible', 'responsible_detail'] + fields = [ + 'pk', + 'code', + 'description', + 'active', + 'responsible', + 'responsible_detail', + ] responsible_detail = OwnerSerializer( source='responsible', read_only=True, allow_null=True