Adds unique IDs to receivable and revenue entries
Ensures unique identification for receivable and revenue entries by generating a UUID and incorporating it into a castle reference. This enhances tracking and linking capabilities by providing a consistent and easily identifiable reference across the system.
This commit is contained in:
parent
e154a8b427
commit
0f24833e02
1 changed files with 33 additions and 17 deletions
50
views_api.py
50
views_api.py
|
|
@ -915,6 +915,15 @@ async def api_create_receivable_entry(
|
|||
fiat_currency = metadata.get("fiat_currency") if metadata else None
|
||||
fiat_amount = Decimal(metadata.get("fiat_amount")) if metadata and metadata.get("fiat_amount") else None
|
||||
|
||||
# Generate unique entry ID for tracking
|
||||
import uuid
|
||||
entry_id = str(uuid.uuid4()).replace("-", "")[:16]
|
||||
|
||||
# Add castle ID as reference/link
|
||||
castle_reference = f"castle-{entry_id}"
|
||||
if data.reference:
|
||||
castle_reference = f"{data.reference}-{entry_id}"
|
||||
|
||||
# Format Beancount entry
|
||||
entry = format_receivable_entry(
|
||||
user_id=data.user_id,
|
||||
|
|
@ -925,7 +934,7 @@ async def api_create_receivable_entry(
|
|||
entry_date=datetime.now().date(),
|
||||
fiat_currency=fiat_currency,
|
||||
fiat_amount=fiat_amount,
|
||||
reference=data.reference
|
||||
reference=castle_reference # Use castle reference with unique ID
|
||||
)
|
||||
|
||||
# Submit to Fava
|
||||
|
|
@ -934,26 +943,26 @@ async def api_create_receivable_entry(
|
|||
# Return a JournalEntry-like response for compatibility
|
||||
from .models import EntryLine
|
||||
return JournalEntry(
|
||||
id=f"fava-{datetime.now().timestamp()}",
|
||||
id=entry_id, # Use the generated castle entry ID
|
||||
description=data.description + description_suffix,
|
||||
entry_date=datetime.now(),
|
||||
created_by=wallet.wallet.id,
|
||||
created_at=datetime.now(),
|
||||
reference=data.reference,
|
||||
reference=castle_reference, # Use castle reference with unique ID
|
||||
flag=JournalEntryFlag.PENDING,
|
||||
meta=entry_meta,
|
||||
lines=[
|
||||
EntryLine(
|
||||
id=f"line-1-{datetime.now().timestamp()}",
|
||||
journal_entry_id=f"fava-{datetime.now().timestamp()}",
|
||||
id=f"line-1-{entry_id}",
|
||||
journal_entry_id=entry_id,
|
||||
account_id=user_receivable.id,
|
||||
amount=amount_sats,
|
||||
description=f"Amount owed by user {data.user_id[:8]}",
|
||||
metadata=metadata or {}
|
||||
),
|
||||
EntryLine(
|
||||
id=f"line-2-{datetime.now().timestamp()}",
|
||||
journal_entry_id=f"fava-{datetime.now().timestamp()}",
|
||||
id=f"line-2-{entry_id}",
|
||||
journal_entry_id=entry_id,
|
||||
account_id=revenue_account.id,
|
||||
amount=-amount_sats,
|
||||
description="Revenue earned",
|
||||
|
|
@ -1021,6 +1030,15 @@ async def api_create_revenue_entry(
|
|||
# Format as Beancount entry and submit to Fava
|
||||
fava = get_fava_client()
|
||||
|
||||
# Generate unique entry ID for tracking
|
||||
import uuid
|
||||
entry_id = str(uuid.uuid4()).replace("-", "")[:16]
|
||||
|
||||
# Add castle ID as reference/link
|
||||
castle_reference = f"castle-{entry_id}"
|
||||
if data.reference:
|
||||
castle_reference = f"{data.reference}-{entry_id}"
|
||||
|
||||
entry = format_revenue_entry(
|
||||
payment_account=payment_account.name,
|
||||
revenue_account=revenue_account.name,
|
||||
|
|
@ -1029,36 +1047,34 @@ async def api_create_revenue_entry(
|
|||
entry_date=datetime.now().date(),
|
||||
fiat_currency=fiat_currency,
|
||||
fiat_amount=fiat_amount,
|
||||
reference=data.reference
|
||||
reference=castle_reference # Use castle reference with unique ID
|
||||
)
|
||||
|
||||
# Submit to Fava
|
||||
result = await fava.add_entry(entry)
|
||||
logger.info(f"Revenue entry submitted to Fava: {result.get('data', 'Unknown')}")
|
||||
|
||||
# Return mock JournalEntry for API compatibility
|
||||
# TODO: Query Fava to get the actual entry back with its hash
|
||||
timestamp = datetime.now().timestamp()
|
||||
# Return JournalEntry for API compatibility
|
||||
return JournalEntry(
|
||||
id=f"fava-{timestamp}",
|
||||
id=entry_id, # Use the generated castle entry ID
|
||||
description=data.description,
|
||||
entry_date=datetime.now(),
|
||||
created_by=wallet.wallet.id,
|
||||
created_at=datetime.now(),
|
||||
reference=data.reference,
|
||||
reference=castle_reference, # Use castle reference with unique ID
|
||||
flag=JournalEntryFlag.CLEARED, # Revenue entries are cleared
|
||||
lines=[
|
||||
EntryLine(
|
||||
id=f"fava-{timestamp}-1",
|
||||
journal_entry_id=f"fava-{timestamp}",
|
||||
id=f"line-1-{entry_id}",
|
||||
journal_entry_id=entry_id,
|
||||
account_id=payment_account.id,
|
||||
amount=amount_sats,
|
||||
description="Payment received",
|
||||
metadata={"fiat_currency": fiat_currency, "fiat_amount": str(fiat_amount)} if fiat_currency else {}
|
||||
),
|
||||
EntryLine(
|
||||
id=f"fava-{timestamp}-2",
|
||||
journal_entry_id=f"fava-{timestamp}",
|
||||
id=f"line-2-{entry_id}",
|
||||
journal_entry_id=entry_id,
|
||||
account_id=revenue_account.id,
|
||||
amount=-amount_sats,
|
||||
description="Revenue earned",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue