60 lines
1.2 KiB
Python
60 lines
1.2 KiB
Python
import datetime
|
|
from typing import List, Tuple, Optional
|
|
|
|
from enums.profit_table_group_by import ProfitTableGroupBy
|
|
from schemas.base import BaseSchema
|
|
|
|
# region Entities
|
|
|
|
class ProfitChartDataItem(BaseSchema):
|
|
date: datetime.date
|
|
revenue: float
|
|
profit: float
|
|
expenses: float
|
|
deals_count: int
|
|
|
|
|
|
class ProfitTableDataItem(BaseSchema):
|
|
grouped_value: datetime.date | str | int
|
|
revenue: float
|
|
profit: float
|
|
expenses: Optional[float] = 0
|
|
deals_count: int
|
|
|
|
# endregion
|
|
|
|
# region Requests
|
|
|
|
class CommonProfitFilters(BaseSchema):
|
|
date_range: Tuple[datetime.date, datetime.date]
|
|
client_id: int
|
|
base_marketplace_key: str
|
|
project_id: int
|
|
board_id: int
|
|
deal_status_id: int
|
|
manager_id: int
|
|
expense_tag_id: int
|
|
income_tag_id: int
|
|
is_completed_only: bool
|
|
|
|
|
|
class GetProfitChartDataRequest(CommonProfitFilters):
|
|
pass
|
|
|
|
|
|
class GetProfitTableDataRequest(CommonProfitFilters):
|
|
group_table_by: ProfitTableGroupBy
|
|
|
|
# endregion
|
|
|
|
# region Responses
|
|
|
|
class GetProfitChartDataResponse(BaseSchema):
|
|
data: List[ProfitChartDataItem]
|
|
|
|
|
|
class GetProfitTableDataResponse(BaseSchema):
|
|
data: List[ProfitTableDataItem]
|
|
|
|
# endregion
|