New alert service

This commit is contained in:
Urtzi Alfaro
2025-12-05 20:07:01 +01:00
parent 1fe3a73549
commit 667e6e0404
393 changed files with 26002 additions and 61033 deletions

View File

@@ -9,7 +9,7 @@ from typing import Dict, Any
from jinja2 import Environment, FileSystemLoader
from datetime import datetime
from shared.messaging.rabbitmq import RabbitMQClient
from shared.messaging import RabbitMQClient
from app.services.email_service import EmailService
from app.services.whatsapp_service import WhatsAppService
@@ -146,7 +146,33 @@ class POEventConsumer:
)
return False
def _prepare_email_context(self, data: Dict[str, Any]) -> Dict[str, Any]:
async def _get_tenant_settings(self, tenant_id: str) -> Dict[str, Any]:
"""Fetch tenant settings from tenant service"""
try:
from shared.clients.tenant_client import TenantServiceClient
from shared.config.base import get_settings
config = get_settings()
tenant_client = TenantServiceClient(config)
# Get tenant details
tenant = await tenant_client.get_tenant(tenant_id)
if not tenant:
logger.warning("Could not fetch tenant details", tenant_id=tenant_id)
return {}
return {
'name': tenant.get('business_name') or tenant.get('name', 'Your Bakery'),
'email': tenant.get('email', 'info@yourbakery.com'),
'phone': tenant.get('phone', '+34 XXX XXX XXX'),
'address': tenant.get('address', 'Your Bakery Address'),
'contact_person': tenant.get('contact_person', 'Bakery Manager')
}
except Exception as e:
logger.error("Failed to fetch tenant settings", tenant_id=tenant_id, error=str(e))
return {}
async def _prepare_email_context(self, data: Dict[str, Any]) -> Dict[str, Any]:
"""
Prepare context data for email template
@@ -191,22 +217,30 @@ class POEventConsumer:
# Items
'items': formatted_items,
# Bakery Info (these should come from tenant settings, defaulting for now)
'bakery_name': 'Your Bakery Name', # TODO: Fetch from tenant settings
'bakery_email': 'orders@yourbakery.com', # TODO: Fetch from tenant settings
'bakery_phone': '+34 XXX XXX XXX', # TODO: Fetch from tenant settings
'bakery_address': 'Your Bakery Address', # TODO: Fetch from tenant settings
'delivery_address': 'Bakery Delivery Address', # TODO: Fetch from PO/tenant
'contact_person': 'Bakery Manager', # TODO: Fetch from tenant settings
'contact_phone': '+34 XXX XXX XXX', # TODO: Fetch from tenant settings
# Payment & Delivery Terms
'payment_terms': 'Net 30 days', # TODO: Fetch from supplier/tenant settings
'delivery_instructions': 'Please deliver to main entrance between 7-9 AM', # TODO: Fetch from PO
'notes': None, # TODO: Extract from PO notes if available
}
# Fetch tenant settings (bakery info)
tenant_id = data.get('tenant_id')
tenant_settings = {}
if tenant_id:
tenant_settings = await self._get_tenant_settings(tenant_id)
# Add bakery info from tenant settings with fallbacks
context.update({
'bakery_name': tenant_settings.get('name', 'Your Bakery Name'),
'bakery_email': tenant_settings.get('email', 'orders@yourbakery.com'),
'bakery_phone': tenant_settings.get('phone', '+34 XXX XXX XXX'),
'bakery_address': tenant_settings.get('address', 'Your Bakery Address'),
'delivery_address': data.get('delivery_address') or tenant_settings.get('address', 'Bakery Delivery Address'),
'contact_person': data.get('contact_person') or tenant_settings.get('contact_person', 'Bakery Manager'),
'contact_phone': data.get('contact_phone') or tenant_settings.get('phone', '+34 XXX XXX XXX'),
# Payment & Delivery Terms - From PO data with fallbacks
'payment_terms': data.get('payment_terms', 'Net 30 days'),
'delivery_instructions': data.get('delivery_instructions', 'Please deliver during business hours'),
'notes': data.get('notes'),
})
return context
def _generate_text_email(self, context: Dict[str, Any]) -> str: