diff --git a/apps/billing/serializers.py b/apps/billing/serializers.py index b398529..c444ae2 100644 --- a/apps/billing/serializers.py +++ b/apps/billing/serializers.py @@ -2,6 +2,7 @@ from rest_framework import serializers from apps.billing.models import Transaction, TransactionItem +from apps.billing.tasks import send_transactions_to_processor_task from apps.organization.models import Organization from apps.shared_revenue.models import RevenueConfiguration @@ -126,7 +127,7 @@ def _execute_shared_revenue_resources( def _execute_billing_resources( self, validate_data: dict, - ) -> list[TransactionItem]: + ) -> tuple[Transaction, list[TransactionItem]]: items = validate_data.pop("items", []) transaction = Transaction.objects.create(**validate_data) items_as_instances: list[TransactionItem] = [] @@ -138,11 +139,11 @@ def _execute_billing_resources( serialized_items.append(TransactionItemSerializer(item).data) validate_data["items"] = serialized_items - return items_as_instances + return transaction, items_as_instances def create(self, validate_data): try: - items: list[TransactionItem] = self._execute_billing_resources(validate_data=validate_data) + transaction, items = self._execute_billing_resources(validate_data=validate_data) for item in items: organization, created = Organization.objects.get_or_create( short_name=item.organization_code, @@ -153,6 +154,8 @@ def create(self, validate_data): product_id=item.product_id, ) + send_transactions_to_processor_task(transaction=transaction) + return validate_data except Exception as e: raise e diff --git a/apps/billing/tasks.py b/apps/billing/tasks.py new file mode 100644 index 0000000..e0b2973 --- /dev/null +++ b/apps/billing/tasks.py @@ -0,0 +1,14 @@ +from celery import shared_task + +from apps.billing.models import Transaction +from apps.billing.services.transaction_service import TransactionService + + +@shared_task(name="apps.billing.tasks.send_transactions_to_processor_task") +def send_transactions_to_processor_task(transaction: Transaction): + try: + document_id: str = TransactionService(transaction=transaction).run_steps_to_send_transaction() + transaction.document_id = document_id + transaction.save() + except Exception as e: + raise e