Add OrganizationOrigin.invoice_grouping

This commit is contained in:
Tobias Kunze 2025-12-04 15:08:30 +01:00 committed by Tobias Brunner
parent d69b46ecfd
commit 8bb25a4f66
Signed by: tobru
SSH key fingerprint: SHA256:kOXg1R6c11XW3/Pt9dbLdQvOJGFAy+B2K6v6PtRWBGQ
3 changed files with 57 additions and 0 deletions

View file

@ -0,0 +1,43 @@
# Generated by Django 5.2.9 on 2025-12-04 12:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0017_add_unit_and_convert_odoo_ids_to_charfield"),
]
operations = [
migrations.AddField(
model_name="organizationorigin",
name="invoice_grouping",
field=models.CharField(
choices=[
("by_service", "By Service"),
("by_organization", "By Organization"),
],
default="by_service",
help_text="Determines how service instances are grouped on invoices.",
max_length=20,
verbose_name="Invoice Line Item Grouping",
),
),
migrations.AlterField(
model_name="computeplanassignment",
name="unit",
field=models.CharField(
choices=[
("hour", "Hour"),
("day", "Day"),
("month", "Month (30 days / 720 hours)"),
("year", "Year"),
],
default="hour",
help_text="Unit for the price (e.g., price per hour)",
max_length=10,
verbose_name="Billing unit",
),
),
]

View file

@ -1,6 +1,7 @@
from .odoo_cache import OdooObjectCache from .odoo_cache import OdooObjectCache
from .organization import ( from .organization import (
BillingEntity, BillingEntity,
InvoiceGroupingChoice,
Organization, Organization,
OrganizationInvitation, OrganizationInvitation,
OrganizationMembership, OrganizationMembership,
@ -30,6 +31,7 @@ __all__ = [
"ComputePlanAssignment", "ComputePlanAssignment",
"ControlPlane", "ControlPlane",
"ControlPlaneCRD", "ControlPlaneCRD",
"InvoiceGroupingChoice",
"OdooObjectCache", "OdooObjectCache",
"Organization", "Organization",
"OrganizationInvitation", "OrganizationInvitation",

View file

@ -382,6 +382,11 @@ class BillingEntity(ServalaModelMixin, models.Model):
return data return data
class InvoiceGroupingChoice(models.TextChoices):
BY_SERVICE = "by_service", _("By Service")
BY_ORGANIZATION = "by_organization", _("By Organization")
class OrganizationOrigin(ServalaModelMixin, models.Model): class OrganizationOrigin(ServalaModelMixin, models.Model):
""" """
Every organization has an origin, though origins may be Every organization has an origin, though origins may be
@ -433,6 +438,13 @@ class OrganizationOrigin(ServalaModelMixin, models.Model):
"Optional message to display instead of billing address (e.g., 'You will be invoiced by Exoscale')." "Optional message to display instead of billing address (e.g., 'You will be invoiced by Exoscale')."
), ),
) )
invoice_grouping = models.CharField(
max_length=20,
choices=InvoiceGroupingChoice.choices,
default=InvoiceGroupingChoice.BY_SERVICE,
verbose_name=_("Invoice Line Item Grouping"),
help_text=_("Determines how service instances are grouped on invoices. "),
)
class Meta: class Meta:
verbose_name = _("Organization origin") verbose_name = _("Organization origin")