Initial commit
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
class TaskEnv:
|
||||
CLN_SUB = 'subscription'
|
||||
CLN_SUB_USER = 'subscription_users'
|
||||
CLN_USER = 'customer'
|
||||
CLN_FAV = 'favs'
|
||||
CLN_STORY = 'story'
|
||||
CLN_STORY_COMMENT = 'story-comment'
|
||||
CLN_ORDER = 'order'
|
||||
CLN_CATEGORY = 'category'
|
||||
CLN_PRODUCT = 'product'
|
||||
CLN_TASK = "task"
|
||||
CLN_CONST = "const"
|
||||
CLN_DEPENDENCY = "dependency"
|
||||
CLN_MEMBER = "member"
|
||||
CLN_PROJECT = "project"
|
||||
CLN_TAGS = "tags"
|
||||
CLN_WORKSPACE = "workspace"
|
||||
@@ -0,0 +1,38 @@
|
||||
import uuid
|
||||
from typing import Optional, List
|
||||
|
||||
import pydantic
|
||||
from pydantic import Field
|
||||
|
||||
from core.models.base import BaseModel
|
||||
|
||||
|
||||
class CustomerPhoneModel(pydantic.BaseModel):
|
||||
title: Optional[str]
|
||||
type: Optional[int]
|
||||
value: Optional[int]
|
||||
weight: Optional[int]
|
||||
|
||||
|
||||
class CustomerMetaModel(pydantic.BaseModel):
|
||||
city: Optional[str]
|
||||
province: Optional[str]
|
||||
address: Optional[str]
|
||||
zip_code: Optional[int]
|
||||
extra_meta: Optional[List[CustomerPhoneModel]]
|
||||
bio: Optional[str]
|
||||
birth_date: Optional[str]
|
||||
|
||||
|
||||
class CustomerModel(BaseModel):
|
||||
id: Optional[uuid.UUID] = Field(alias='_id')
|
||||
name: Optional[List[str]]
|
||||
mobile: Optional[str]
|
||||
username: Optional[str]
|
||||
images: Optional[List[str]]
|
||||
stores: Optional[List[str]]
|
||||
parent_id: Optional[List[uuid.UUID]] = Field(description='کاربر پدر')
|
||||
reagent_code: Optional[str]
|
||||
total_order: Optional[int] = 0
|
||||
active_order: Optional[int] = 0
|
||||
meta: Optional[CustomerMetaModel]
|
||||
@@ -0,0 +1,102 @@
|
||||
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("""
|
||||
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='فیلدهای طراحی')
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
from uuid import UUID
|
||||
|
||||
from app.models.project import ProjectModel
|
||||
from core.repositories.base import BaseRepository
|
||||
from core.service.mongo_db import use_collection
|
||||
|
||||
COLLECTION = "project"
|
||||
class ProjectRepository(BaseRepository[ProjectModel]):
|
||||
def __init__(self):
|
||||
super().__init__(collection=COLLECTION, model=ProjectModel)
|
||||
def create_code(self,coding:ProjectModel):
|
||||
code = str(coding.counter)
|
||||
print("code1",code)
|
||||
if len(code) < 4:
|
||||
code = code.rjust(4, '0')
|
||||
print("code2", code)
|
||||
code = coding.design.nature + coding.design.type + code
|
||||
return code
|
||||
|
||||
|
||||
async def create(self,coding:ProjectModel):
|
||||
print("11111111111111111")
|
||||
coding.counter = 1
|
||||
last_project = await use_collection(COLLECTION).find({}).sort("$natural",-1).to_list(None)
|
||||
if last_project:
|
||||
coding.counter = last_project[0]["counter"]+1
|
||||
code = self.create_code(coding)
|
||||
coding.design.code = 'D'+code
|
||||
if coding.monitor:
|
||||
coding.monitor.code = 'S'+code
|
||||
coding.init_id().cu_at()
|
||||
await use_collection(COLLECTION).insert_one(coding.mongo_dict())
|
||||
return await self.get(coding.id)
|
||||
|
||||
|
||||
async def update(self, _id: UUID, update: ProjectModel):
|
||||
old_project = await use_collection(COLLECTION).find_one({"_id":_id})
|
||||
old_project = ProjectModel(**old_project)
|
||||
if update.monitor and not old_project.monitor:
|
||||
code = self.create_code(update)
|
||||
update.monitor.code = 'S'+code
|
||||
if update.design.nature != old_project.design.nature or update.design.type != old_project.design.type :
|
||||
code = self.create_code(update)
|
||||
update.design.code = 'D' + code
|
||||
if update.monitor:
|
||||
update.monitor.code = 'S' + code
|
||||
update.u_at()
|
||||
await use_collection(COLLECTION).update_one({"_id":_id},{"$set":update.mongo_dict()})
|
||||
return await self.get(_id)
|
||||
@@ -0,0 +1 @@
|
||||
from .project import *
|
||||
@@ -0,0 +1,47 @@
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import Body
|
||||
|
||||
from app.models.project import ProjectModel
|
||||
from app.repositories.project import ProjectRepository
|
||||
from core.app import app
|
||||
from core.utils.router import generate_router, shrink
|
||||
from core.utils.table_engine import TableEngineExport, TableEngineRequestType
|
||||
|
||||
ThisModel = ProjectModel
|
||||
router_base_url = 'project'
|
||||
_tag_base = [router_base_url]
|
||||
router = generate_router(router_base_url, auth_dependencies=False, version='v2')
|
||||
repo = ProjectRepository()
|
||||
|
||||
|
||||
@router.post('/create', response_model=ThisModel, tags=_tag_base)
|
||||
@shrink(repo.create)
|
||||
def create(coding: ThisModel = Body(...)):
|
||||
pass
|
||||
|
||||
|
||||
@router.put('/{_id}', response_model=ThisModel, tags=_tag_base)
|
||||
@shrink(repo.update)
|
||||
def update(_id: UUID, coding: ThisModel = Body(...)):
|
||||
pass
|
||||
|
||||
|
||||
@router.delete('/{_id}', response_model=bool, tags=_tag_base)
|
||||
@shrink(repo.delete)
|
||||
def delete(_id: UUID):
|
||||
pass
|
||||
|
||||
@router.get('/{_id}', response_model=ThisModel, tags=_tag_base)
|
||||
@shrink(repo.get)
|
||||
def get(_id: UUID):
|
||||
pass
|
||||
|
||||
|
||||
@router.post('', response_model=TableEngineExport[ThisModel], tags=_tag_base)
|
||||
@shrink(repo.fetch)
|
||||
def fetch(body: TableEngineRequestType = Body(...)):
|
||||
pass
|
||||
|
||||
|
||||
app.include_router(router)
|
||||
Reference in New Issue
Block a user