Add POI feature and imporve the overall backend implementation

This commit is contained in:
Urtzi Alfaro
2025-11-12 15:34:10 +01:00
parent e8096cd979
commit 5783c7ed05
173 changed files with 16862 additions and 9078 deletions

View File

@@ -144,7 +144,45 @@ class SalesServiceClient(BaseServiceClient):
) -> Optional[Dict[str, Any]]:
"""Update a product"""
return await self.put(f"sales/products/{product_id}", data=updates, tenant_id=tenant_id)
async def create_sales_record(
self,
tenant_id: str,
sales_data: Dict[str, Any]
) -> Optional[Dict[str, Any]]:
"""Create a new sales record
Args:
tenant_id: Tenant ID
sales_data: Sales record data including:
- inventory_product_id: Optional UUID for inventory tracking
- product_name: Product name
- product_category: Product category
- quantity_sold: Quantity sold
- unit_price: Unit price
- total_amount: Total amount
- sale_date: Sale date (YYYY-MM-DD)
- sales_channel: Sales channel (retail, wholesale, online, pos, etc.)
- source: Data source (manual, pos_sync, import, etc.)
- payment_method: Payment method
- notes: Optional notes
Returns:
Created sales record or None if failed
"""
try:
result = await self.post("sales/sales", data=sales_data, tenant_id=tenant_id)
if result:
logger.info("Created sales record via client",
tenant_id=tenant_id,
product=sales_data.get("product_name"))
return result
except Exception as e:
logger.error("Failed to create sales record",
error=str(e),
tenant_id=tenant_id)
return None
# ================================================================
# DATA IMPORT
# ================================================================

View File

@@ -102,3 +102,40 @@ class DataImportedEvent(BaseEvent):
event_type="data.imported",
correlation_id=correlation_id
)
# Procurement Events
class PurchaseOrderApprovedEvent(BaseEvent):
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="po.approved",
correlation_id=correlation_id
)
class PurchaseOrderRejectedEvent(BaseEvent):
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="po.rejected",
correlation_id=correlation_id
)
class PurchaseOrderSentToSupplierEvent(BaseEvent):
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="po.sent_to_supplier",
correlation_id=correlation_id
)
class DeliveryReceivedEvent(BaseEvent):
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="delivery.received",
correlation_id=correlation_id
)