New alert service
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user