Implement sales tenant pipeline events
This commit is contained in:
@@ -40,6 +40,74 @@ SalesPaymentStatus = Literal["pending", "success", "failed", "canceled", "partia
|
||||
SalesEscalationSeverity = Literal["low", "medium", "high", "critical"]
|
||||
SalesEscalationStatus = Literal["open", "in_progress", "resolved"]
|
||||
SalesAutomationStatus = Literal["pending", "running", "completed", "failed", "canceled"]
|
||||
SalesPipelineStageCategory = Literal["entry", "communication", "commercial", "paperwork", "finance", "closing"]
|
||||
|
||||
|
||||
class SalesStageRefOut(BaseModel):
|
||||
id: str
|
||||
code: str
|
||||
name: str
|
||||
category: SalesPipelineStageCategory
|
||||
sort_order: int
|
||||
|
||||
|
||||
class SalesPipelineOut(BaseModel):
|
||||
pipeline_id: str
|
||||
tenant_id: str
|
||||
code: str
|
||||
name: str
|
||||
description: str | None = None
|
||||
is_default: bool
|
||||
is_active: bool
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
|
||||
class SalesPipelineCreate(BaseModel):
|
||||
code: str = Field(default="default_sales", min_length=2)
|
||||
name: str = Field(min_length=2)
|
||||
description: str | None = None
|
||||
is_default: bool = False
|
||||
is_active: bool = True
|
||||
|
||||
|
||||
class SalesPipelineUpdate(BaseModel):
|
||||
name: str | None = Field(default=None, min_length=2)
|
||||
description: str | None = None
|
||||
is_default: bool | None = None
|
||||
is_active: bool | None = None
|
||||
|
||||
|
||||
class SalesPipelineStageOut(BaseModel):
|
||||
stage_id: str
|
||||
tenant_id: str
|
||||
pipeline_id: str
|
||||
code: str
|
||||
name: str
|
||||
category: SalesPipelineStageCategory
|
||||
sort_order: int
|
||||
is_terminal: bool
|
||||
is_system: bool
|
||||
is_active: bool
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
|
||||
class SalesPipelineStageCreate(BaseModel):
|
||||
code: str = Field(min_length=2)
|
||||
name: str = Field(min_length=2)
|
||||
category: SalesPipelineStageCategory
|
||||
sort_order: int = 0
|
||||
is_terminal: bool = False
|
||||
is_system: bool = False
|
||||
is_active: bool = True
|
||||
|
||||
|
||||
class SalesPipelineStageUpdate(BaseModel):
|
||||
name: str | None = Field(default=None, min_length=2)
|
||||
category: SalesPipelineStageCategory | None = None
|
||||
sort_order: int | None = None
|
||||
is_active: bool | None = None
|
||||
|
||||
|
||||
class SalesLeadCreate(BaseModel):
|
||||
@@ -117,7 +185,8 @@ class SalesLeadOut(BaseModel):
|
||||
class SalesDealCreate(BaseModel):
|
||||
lead_id: str | None = None
|
||||
customer_id: str | None = None
|
||||
stage_id: str = "new_qualified_lead"
|
||||
stage_id: str | None = Field(default=None, min_length=2)
|
||||
stage_code: str | None = Field(default=None, min_length=2)
|
||||
scenario_type: SalesScenarioType = "quick_sale"
|
||||
priority: int = Field(default=3, ge=1, le=5)
|
||||
title: str = Field(min_length=3)
|
||||
@@ -151,7 +220,8 @@ class SalesDealUpdate(BaseModel):
|
||||
|
||||
|
||||
class SalesDealStageChangeIn(BaseModel):
|
||||
stage_id: str = Field(min_length=2)
|
||||
stage_id: str | None = Field(default=None, min_length=2)
|
||||
stage_code: str | None = Field(default=None, min_length=2)
|
||||
reason: str | None = None
|
||||
|
||||
|
||||
@@ -175,8 +245,10 @@ class SalesDealOut(BaseModel):
|
||||
tenant_id: str
|
||||
lead_id: str | None = None
|
||||
customer_id: str | None = None
|
||||
pipeline_id: str = "sales_default"
|
||||
pipeline_id: str
|
||||
stage_id: str
|
||||
pipeline: SalesPipelineOut | None = None
|
||||
stage: SalesStageRefOut | None = None
|
||||
scenario_type: SalesScenarioType
|
||||
priority: int
|
||||
title: str
|
||||
@@ -578,6 +650,8 @@ class SalesStageHistoryOut(BaseModel):
|
||||
deal_id: str
|
||||
from_stage_id: str | None = None
|
||||
to_stage_id: str
|
||||
from_stage: SalesStageRefOut | None = None
|
||||
to_stage: SalesStageRefOut | None = None
|
||||
changed_by_type: str
|
||||
changed_by_id: str | None = None
|
||||
reason: str | None = None
|
||||
@@ -605,6 +679,8 @@ class SalesTimelineEventOut(BaseModel):
|
||||
class SalesWorkspaceOut(BaseModel):
|
||||
lead: SalesLeadOut | None = None
|
||||
deal: SalesDealOut
|
||||
pipeline: SalesPipelineOut | None = None
|
||||
stage: SalesStageRefOut | None = None
|
||||
communications: list[SalesCommunicationOut] = Field(default_factory=list)
|
||||
messages: list[SalesMessageOut] = Field(default_factory=list)
|
||||
calls: list[SalesCallOut] = Field(default_factory=list)
|
||||
@@ -624,6 +700,7 @@ class SalesWorkspaceOut(BaseModel):
|
||||
class SalesDashboardStageOut(BaseModel):
|
||||
stage_id: str
|
||||
label: str
|
||||
stage: SalesStageRefOut | None = None
|
||||
count: int = 0
|
||||
amount: float = 0.0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user