diff --git a/src/servala/core/admin.py b/src/servala/core/admin.py index 073d444..0a4208d 100644 --- a/src/servala/core/admin.py +++ b/src/servala/core/admin.py @@ -66,8 +66,22 @@ class OrganizationAdmin(admin.ModelAdmin): def get_readonly_fields(self, request, obj=None): readonly_fields = list(super().get_readonly_fields(request, obj) or []) readonly_fields.append("namespace") # Always read-only + + if obj and obj.has_inherited_billing_entity: + readonly_fields.append("billing_entity") + return readonly_fields + def get_form(self, request, obj=None, **kwargs): + form = super().get_form(request, obj, **kwargs) + + if obj and obj.has_inherited_billing_entity: + form.base_fields["billing_entity"].help_text = _( + "This billing entity is inherited from the organization's origin and cannot be modified." + ) + + return form + @admin.register(BillingEntity) class BillingEntityAdmin(admin.ModelAdmin): @@ -77,8 +91,9 @@ class BillingEntityAdmin(admin.ModelAdmin): @admin.register(OrganizationOrigin) class OrganizationOriginAdmin(admin.ModelAdmin): - list_display = ("name",) + list_display = ("name", "billing_entity") search_fields = ("name",) + autocomplete_fields = ("billing_entity",) @admin.register(OrganizationMembership) diff --git a/src/servala/core/models/organization.py b/src/servala/core/models/organization.py index 7b06a41..b0d58d5 100644 --- a/src/servala/core/models/organization.py +++ b/src/servala/core/models/organization.py @@ -89,6 +89,10 @@ class Organization(ServalaModelMixin, models.Model): def get_absolute_url(self): return self.urls.base + @property + def has_inherited_billing_entity(self): + return self.origin and self.billing_entity == self.origin.billing_entity + def set_owner(self, user): with scopes_disabled(): OrganizationMembership.objects.filter(user=user, organization=self).delete() diff --git a/src/servala/frontend/forms/organization.py b/src/servala/frontend/forms/organization.py index 915ad7b..6fd04b4 100644 --- a/src/servala/frontend/forms/organization.py +++ b/src/servala/frontend/forms/organization.py @@ -8,6 +8,10 @@ from servala.frontend.forms.mixins import HtmxMixin class OrganizationForm(HtmxMixin, ModelForm): + # def __init__(self, *args, **kwargs): + # super().__init__(*args, **kwargs) + # if self.instance and self.instance.has_inherited_billing_entity: + # TODO disable billing entity editing class Meta: model = Organization fields = ("name",) @@ -46,7 +50,7 @@ class OrganizationCreateForm(OrganizationForm): def __init__(self, *args, user=None, **kwargs): super().__init__(*args, **kwargs) - + self.user = user if not self.initial.get("invoice_country"): default_country_name = "Switzerland" country_choices = self.fields["invoice_country"].choices @@ -55,7 +59,6 @@ class OrganizationCreateForm(OrganizationForm): self.initial["invoice_country"] = country_id break - self.user = user self.odoo_addresses = get_invoice_addresses(self.user) if self.odoo_addresses: diff --git a/src/servala/frontend/templates/frontend/organizations/update.html b/src/servala/frontend/templates/frontend/organizations/update.html index 97d266d..2e1b9b0 100644 --- a/src/servala/frontend/templates/frontend/organizations/update.html +++ b/src/servala/frontend/templates/frontend/organizations/update.html @@ -69,6 +69,11 @@
+ {% translate "This billing address cannot be modified." %} +
+ {% endif %}