diff --git a/src/servala/core/models/organization.py b/src/servala/core/models/organization.py index 4b9b435..e610572 100644 --- a/src/servala/core/models/organization.py +++ b/src/servala/core/models/organization.py @@ -184,11 +184,28 @@ class BillingEntity(ServalaModelMixin, models.Model): return instance @classmethod - def create_from_id(cls, odoo_id): - # TODO implement odoo creation from ID - # instance = BillingEntity.objects.create(name=odoo_data.get("name")) - # return instance - pass + @transaction.atomic + def create_from_id(cls, name, odoo_id): + parent_data = CLIENT.search_read( + model="res.partner", + domain=[["id", "=", odoo_id]], + fields=["parent_id"], + limit=1, + ) + # Data validation: If the data is not as expected, we just return None, + # rather than raising an exception, for now. + if not parent_data: + return + if not (parent_info := parent_data[0].get("parent_id")): + return + if not isinstance(parent_info, (list, tuple)) or not len(parent_info) > 0: + # parent_info is a tuple of the parent’s ID and name + return + + instance = cls.objects.create( + name=name, odoo_invoice_id=odoo_id, odoo_company_id=parent_info[0] + ) + return instance @cached_property def odoo_data(self): diff --git a/src/servala/settings.py b/src/servala/settings.py index bb69ebb..8322e4a 100644 --- a/src/servala/settings.py +++ b/src/servala/settings.py @@ -10,11 +10,12 @@ Servala is run using environment variables. Documentation: """ import os -import sentry_sdk from pathlib import Path + +import sentry_sdk +from django.contrib import messages from sentry_sdk.integrations.django import DjangoIntegration -from django.contrib import messages from servala.__about__ import __version__ as version SERVALA_ENVIRONMENT = os.environ.get("SERVALA_ENVIRONMENT", "development")