import datetime import uuid import pydantic from pydantic import Field from typing import Optional, List from core.models.base import BaseModel class Budget(pydantic.BaseModel): year:str=Field("سال بودجه") amount:int=Field("مبلغ بودجه") class BaseMonitor(pydantic.BaseModel): type:int = Field(description=""" 1.عالیه 2.کارگاهی 3. عالیه-کارگاهی """) date_delivery_land:Optional[datetime.datetime] =Field(description=" تاریخ تحویل زمین") date_building_permit:Optional[datetime.datetime] = Field(description=" تاریخ صدور پروانه ساختمانی") date_expire_permit:Optional[datetime.datetime] = Field(description="تاریخ پایان اعتبار پروانه ساختمانی") address:Optional[str] = Field(description="آدرس پروژه") budget:Optional[List[Budget]] class AddTFPercent(pydantic.BaseModel): amount:int = Field(description="مبلغ") percent:int = Field(description="درصد") date:datetime.datetime = Field(description="تاریخ ابلاغ") class Adding(pydantic.BaseModel): row:int = Field(description="ردیف") amount:int = Field(description="مبلغ") date:datetime.datetime = Field(description="تاریخ الحاقیه") class DetailMonitor(pydantic.BaseModel): type:int = Field(description=""" 1.فهرست بهایی 2.سرجمع 3.سایر """) date_create_project:datetime.datetime = Field(description="تاریخ شروع پروژه") first_time:int = Field(description="مدت اولیه پیمان") extend_time:int = Field(description="میزان تمدید پیمان") date_estimate_complete :datetime.datetime = Field(description="تاریخ پیش بینی اتمام") first_amount:int = Field(description="مبلغ اولیه پیمان") base_amount_year:str = Field(description="فهرست بهای پایه") add_25_percent:Optional[List[AddTFPercent]] = Field(description="افزایش تا 25 درصد پیمان") adding:Optional[List[Adding]] = Field(description="الحاقیه") class AgentMonitor(pydantic.BaseModel): workshop_consultant:str = Field(description=" نام مشاور نظارت کارگاهی") designer:str = Field(description="نام مشاور طراح") designer_phone:str = Field(description="شماره تماس مشاور طراح") constractor:str = Field(description=" نام پیمانکار") constractor_phone:str = Field(description="شماره تماس پیمانکار") supervisor:str = Field(description="نام سرناظر") supervisor_phone:str = Field(description=" شماره تماس سر ناظر") supervisor_building:str = Field(description="نام ناظر ابنیه") supervisor_building_phone:str = Field(description=" شماره تماس ابنیه") supervisor_mechanic:str = Field(description="نام ناظر مکانیک") supervisor_mechanic_phone:str = Field(description=" شماره تماس مکانیک") supervisor_electricity:str = Field(description=" نام ناظر برق") supervisor_electricity_phone:str = Field(description=" شماره تماس ناظر برق") project_manager:str = Field(description=" نام مدیر پروژه") project_manager_phone:str = Field(description="شماره تماس مدیر پروژه") supervisor_workshop:str = Field(description=" نام سرپرست کارگاه") supervisor_workshop_phone:str = Field(description="شماره تماس سرپرست کارگاه") class StatusBranch(pydantic.BaseModel): electricity:bool = Field(description="برق") water:bool = Field(description="آب") wastewater:bool = Field(description="فاضلاب") gas:bool = Field(description="گاز") phone:bool = Field(description="تلفن و فیبر نوری") class Monitor(pydantic.BaseModel): code: Optional[str] = Field(description='کد در این فیلد قرار می گیرد') base_information:Optional[BaseMonitor] = Field(description="اطلاعات پایه") detail:Optional[DetailMonitor] = Field(description="مشخصات پیمان") agent:Optional[AgentMonitor] = Field(description="عوامل پروژه") status_branch:Optional[StatusBranch] = Field(description="وضعیت انشعابات") class Design(pydantic.BaseModel): code: Optional[str] = Field(description='کد در این فیلد قرار می گیرد') title: str = Field(description='عنوان در این فیلد قرار می گیرد') state: str = Field(description='استان در این فیلد قرار می گیرد') city: str = Field(description='شهر در این فیلد قرار می گیرد') nature_id: int = Field(description='کد شناسایی ماهبت در این فیلد قرار می گیرد') nature: str = Field(description='ماهبت در این فیلد قرار می گیرد') type_id: int = Field(description='کد شناسایی نوع پروژه در این فیلد قرار می گیرد') type: str = Field(description='نوع پروژه در این فیلد قرار می گیرد') budget_id: int = Field(description='کد شناسایی دسته بودچه در این فیلد قرار می گیرد') budget: str = Field(description='دسته بودجه در این فیلد قرار می گیرد') date_send: datetime.datetime = Field(description='تاریخ ابالغ/ارجاع') letter: str = Field(description='شماره نامه') land_area:Optional[str] = Field(description="مساحت زمین") building_infrastructure:Optional[str] = Field(description="زیربنای ساختمان") site_area:Optional[str] = Field(description="مساحت محوطه") designer:Optional[List[str]] = Field(description="نام طراح") status_agreement:Optional[str] = Field(description="وضعیت موافقتنامه") description:Optional[str] = Field(description="توضیحات") class ProjectModel(BaseModel): id: Optional[uuid.UUID] = Field(alias='_id') user_id: int = Field(description='کد شناسایی کاربر در این فیلد قرار می گیرد') sts: int = Field(description='وضعیت در این فیلد قرار می گیرد') counter: Optional[int] = Field(description='شمارنده در این فیلد قرار می گیرد') monitor:Optional[Monitor] = Field(description="فیلدهای نظارت") design:Design = Field(description='فیلدهای طراحی')