feat: projects and boards
This commit is contained in:
61
schemas/board.py
Normal file
61
schemas/board.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
from schemas.project import ProjectSchema
|
||||
from schemas.status import StatusSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
|
||||
class BaseBoardSchema(BaseSchema):
|
||||
name: str
|
||||
project_id: int
|
||||
|
||||
|
||||
class BoardSchema(BaseBoardSchema):
|
||||
id: int
|
||||
ordinal_number: int
|
||||
deal_statuses: list[StatusSchema]
|
||||
project: ProjectSchema
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Requests
|
||||
|
||||
class CreateBoardRequest(BaseSchema):
|
||||
board: BaseBoardSchema
|
||||
|
||||
|
||||
class UpdateBoardRequest(BaseSchema):
|
||||
board: BoardSchema
|
||||
|
||||
|
||||
class UpdateBoardOrderRequest(BaseSchema):
|
||||
project_id: int
|
||||
board_id: int
|
||||
new_ordinal_number: int
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Responses
|
||||
|
||||
class GetBoardsResponse(BaseSchema):
|
||||
boards: list[BoardSchema]
|
||||
|
||||
|
||||
class CreateBoardResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateBoardResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateBoardOrderResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteBoardResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion
|
||||
@@ -1,18 +1,19 @@
|
||||
import datetime
|
||||
from collections import defaultdict
|
||||
from typing import List, Optional, Union, Dict, Tuple, TypedDict
|
||||
from typing import List, Optional, Union
|
||||
|
||||
from pydantic import constr, field_validator
|
||||
from pydantic import constr
|
||||
|
||||
from models import ServiceCategoryPrice, ServicePriceCategory, Deal, Product, DealProduct, DealStatusHistory
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
from schemas.billing import DealBillRequestSchema,GroupBillRequestSchema
|
||||
from schemas.billing import DealBillRequestSchema
|
||||
from schemas.board import BoardSchema
|
||||
from schemas.client import ClientSchema
|
||||
from schemas.group import DealGroupSchema
|
||||
from schemas.marketplace import BaseMarketplaceSchema
|
||||
from schemas.product import ProductSchema
|
||||
from schemas.service import ServiceSchema, ServicePriceCategorySchema
|
||||
from schemas.shipping import PalletSchema, BoxSchema
|
||||
from schemas.shipping_warehouse import ShippingWarehouseSchema, BaseShippingWarehouseSchema
|
||||
from schemas.status import StatusSchema, DealStatusHistorySchema
|
||||
from schemas.user import UserSchema
|
||||
|
||||
|
||||
@@ -24,21 +25,13 @@ class FastDeal(BaseSchema):
|
||||
acceptance_date: datetime.datetime
|
||||
|
||||
|
||||
class DealGroupSchema(BaseSchema):
|
||||
id: int
|
||||
name: Optional[str] = None
|
||||
lexorank: str
|
||||
bill_request: Optional[GroupBillRequestSchema] = None
|
||||
|
||||
|
||||
class DealSummary(BaseSchema):
|
||||
id: int
|
||||
name: str
|
||||
client_name: str
|
||||
changed_at: datetime.datetime
|
||||
created_at: datetime.datetime
|
||||
deadline: Optional[datetime.datetime] = None
|
||||
status: int
|
||||
status: StatusSchema
|
||||
board: BoardSchema
|
||||
total_price: int
|
||||
rank: int
|
||||
base_marketplace: Optional[BaseMarketplaceSchema] = None
|
||||
@@ -75,15 +68,6 @@ class DealProductSchema(BaseSchema):
|
||||
comment: str = ""
|
||||
|
||||
|
||||
class DealStatusHistorySchema(BaseSchema):
|
||||
user: UserSchema
|
||||
changed_at: datetime.datetime
|
||||
from_status: int
|
||||
to_status: int
|
||||
next_status_deadline: datetime.datetime | None
|
||||
comment: str | None = None
|
||||
|
||||
|
||||
class DealEmployeesSchema(BaseSchema):
|
||||
user: UserSchema
|
||||
created_at: datetime.datetime
|
||||
@@ -94,7 +78,8 @@ class DealSchema(BaseSchema):
|
||||
name: str
|
||||
client_id: int
|
||||
created_at: datetime.datetime
|
||||
current_status: int
|
||||
status: StatusSchema
|
||||
board: BoardSchema
|
||||
services: List[DealServiceSchema]
|
||||
products: List[DealProductSchema]
|
||||
status_history: List[DealStatusHistorySchema]
|
||||
@@ -127,6 +112,8 @@ class DealGeneralInfoSchema(BaseSchema):
|
||||
delivery_date: Optional[datetime.datetime] = None
|
||||
receiving_slot_date: Optional[datetime.datetime] = None
|
||||
manager: Optional[UserSchema] = None
|
||||
board: BoardSchema
|
||||
status: StatusSchema
|
||||
|
||||
|
||||
class OptionalShippingWarehouseSchema(BaseShippingWarehouseSchema):
|
||||
@@ -166,6 +153,7 @@ class DealChangeStatusRequest(BaseSchema):
|
||||
|
||||
class DealCreateRequest(BaseSchema):
|
||||
name: str
|
||||
status_id: int
|
||||
|
||||
|
||||
class DealQuickCreateRequest(BaseSchema):
|
||||
@@ -176,6 +164,7 @@ class DealQuickCreateRequest(BaseSchema):
|
||||
shipping_warehouse: constr(strip_whitespace=True)
|
||||
base_marketplace: BaseMarketplaceSchema
|
||||
category: Optional[ServicePriceCategorySchema] = None
|
||||
status_id: int
|
||||
|
||||
|
||||
class DealSummaryRequest(BaseSchema):
|
||||
@@ -243,7 +232,7 @@ class DealUpdateGeneralInfoRequest(BaseSchema):
|
||||
|
||||
class DealSummaryReorderRequest(BaseSchema):
|
||||
deal_id: int
|
||||
status: int
|
||||
status_id: int
|
||||
index: int
|
||||
deadline: datetime.datetime | None = None
|
||||
comment: str | None = None
|
||||
@@ -300,32 +289,10 @@ class ManageEmployeeRequest(BaseSchema):
|
||||
|
||||
class CreateDealsFromExcelRequest(BaseSchema):
|
||||
client_id: int
|
||||
status_id: int
|
||||
products: list[ProductFromExcelSchema]
|
||||
|
||||
|
||||
class DealAddToGroupRequest(BaseSchema):
|
||||
deal_id: int
|
||||
group_id: int
|
||||
|
||||
|
||||
class DealCreateGroupRequest(BaseSchema):
|
||||
dragging_deal_id: int
|
||||
hovered_deal_id: int
|
||||
|
||||
|
||||
class DealRemoveFromGroupRequest(BaseSchema):
|
||||
deal_id: int
|
||||
|
||||
|
||||
class DealGroupUpdateRequest(BaseSchema):
|
||||
data: DealGroupSchema
|
||||
|
||||
|
||||
class DealGroupChangeStatusRequest(BaseSchema):
|
||||
group_id: int
|
||||
new_status: int
|
||||
|
||||
|
||||
# endregion Requests
|
||||
|
||||
# region Responses
|
||||
@@ -452,23 +419,4 @@ class CreateDealsFromExcelResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealAddToGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealCreateGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealRemoveFromGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealGroupUpdateResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealGroupChangeStatusResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion Responses
|
||||
|
||||
66
schemas/group.py
Normal file
66
schemas/group.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from typing import Optional
|
||||
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
from schemas.billing import GroupBillRequestSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
|
||||
class DealGroupSchema(BaseSchema):
|
||||
id: int
|
||||
name: Optional[str] = None
|
||||
lexorank: str
|
||||
bill_request: Optional[GroupBillRequestSchema] = None
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Requests
|
||||
|
||||
class DealGroupUpdateRequest(BaseSchema):
|
||||
data: DealGroupSchema
|
||||
|
||||
|
||||
class DealCreateGroupRequest(BaseSchema):
|
||||
dragging_deal_id: int
|
||||
hovered_deal_id: int
|
||||
|
||||
|
||||
class DealGroupChangeStatusRequest(BaseSchema):
|
||||
group_id: int
|
||||
new_status: int
|
||||
|
||||
|
||||
class DealAddToGroupRequest(BaseSchema):
|
||||
deal_id: int
|
||||
group_id: int
|
||||
|
||||
|
||||
class DealRemoveFromGroupRequest(BaseSchema):
|
||||
deal_id: int
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Responses
|
||||
|
||||
class DealCreateGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealGroupUpdateResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealGroupChangeStatusResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealAddToGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DealRemoveFromGroupResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion
|
||||
50
schemas/project.py
Normal file
50
schemas/project.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
|
||||
|
||||
class BaseProjectSchema(BaseSchema):
|
||||
name: str
|
||||
|
||||
|
||||
class ProjectSchema(BaseProjectSchema):
|
||||
id: int
|
||||
|
||||
|
||||
class ProjectSchemaWithCount(ProjectSchema):
|
||||
boards_count: int
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Requests
|
||||
|
||||
class CreateProjectRequest(BaseSchema):
|
||||
project: BaseProjectSchema
|
||||
|
||||
|
||||
class UpdateProjectRequest(BaseSchema):
|
||||
project: ProjectSchema
|
||||
|
||||
# endregion
|
||||
|
||||
|
||||
# region Responses
|
||||
|
||||
class GetProjectsResponse(BaseSchema):
|
||||
projects: list[ProjectSchemaWithCount]
|
||||
|
||||
|
||||
class CreateProjectResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateProjectResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteProjectResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion
|
||||
@@ -29,10 +29,13 @@ 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):
|
||||
|
||||
65
schemas/status.py
Normal file
65
schemas/status.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from datetime import datetime
|
||||
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
from schemas.user import UserSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
|
||||
class BaseStatusSchema(BaseSchema):
|
||||
name: str
|
||||
board_id: int
|
||||
|
||||
|
||||
class StatusSchema(BaseStatusSchema):
|
||||
id: int
|
||||
ordinal_number: int
|
||||
is_deleted: bool = False
|
||||
|
||||
|
||||
class DealStatusHistorySchema(BaseSchema):
|
||||
user: UserSchema
|
||||
changed_at: datetime
|
||||
from_status: StatusSchema
|
||||
to_status: StatusSchema
|
||||
next_status_deadline: datetime | None
|
||||
comment: str | None = None
|
||||
|
||||
# endregion
|
||||
|
||||
# region Requests
|
||||
|
||||
class CreateStatusRequest(BaseSchema):
|
||||
status: BaseStatusSchema
|
||||
|
||||
|
||||
class UpdateStatusRequest(BaseSchema):
|
||||
status: StatusSchema
|
||||
|
||||
|
||||
class UpdateStatusOrderRequest(BaseSchema):
|
||||
board_id: int
|
||||
status_id: int
|
||||
new_ordinal_number: int
|
||||
|
||||
# endregion
|
||||
|
||||
|
||||
# region Responses
|
||||
|
||||
class CreateStatusResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateStatusResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateStatusOrderResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteStatusResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion
|
||||
Reference in New Issue
Block a user