feat:add contract
This commit is contained in:
@@ -5,3 +5,5 @@ class TaskEnv:
|
||||
CLN_AUDIT_FACTOR = 'audit_factor'
|
||||
CLN_AUDIT_PROGRAM = 'audit_program'
|
||||
CLN_BILL_DELAY = 'bill_delay'
|
||||
CLN_CONTRACT = 'contract'
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from typing import Optional, List, Literal
|
||||
|
||||
import pydantic
|
||||
from pydantic import Field
|
||||
|
||||
from core.models.base import BaseModel
|
||||
|
||||
class AddendumModel(pydantic.BaseModel):
|
||||
id: Optional[uuid.UUID] = Field(description="کد شناسایی الحاقیه")
|
||||
number: Optional[str] = Field(description="شماره الحاقیه")
|
||||
amount: Optional[int] = Field(description=' مبلغ الحاقیه')
|
||||
description: Optional[str] = Field(description='توضیحات')
|
||||
end_date: Optional[datetime] = Field(description='تاریخ پایان الحاقیه')
|
||||
created_at: Optional[datetime] = Field(description='تاریخ ایجاد رکورد')
|
||||
updated_at: Optional[datetime] = Field(description='تاریخ آخرین بروزرسانی رکورد')
|
||||
user_id: Optional[uuid.UUID] = Field(description='کد شناسایی کاربر در این فیلد قرار می گیرد')
|
||||
|
||||
class ExtensionModel(pydantic.BaseModel):
|
||||
id: Optional[uuid.UUID] = Field(description="کد شناسایی الحاقیه")
|
||||
created_at: Optional[datetime] = Field(description='تاریخ ایجاد رکورد')
|
||||
updated_at: Optional[datetime] = Field(description='تاریخ آخرین بروزرسانی رکورد')
|
||||
user_id: Optional[uuid.UUID] = Field(description='کد شناسایی کاربر در این فیلد قرار می گیرد')
|
||||
day_to_end: Optional[int] = Field(description='میزان روز مانده به پایان قرارداد')
|
||||
description: Optional[str] = Field(description='توضیحات')
|
||||
status:Optional[str] = Field(description='وضعیت تمدید پیمان')
|
||||
|
||||
class ContractModel(BaseModel):
|
||||
id: Optional[uuid.UUID] = Field(alias='_id')
|
||||
project_id: uuid.UUID = Field(description='کد شناسایی پروژ')
|
||||
state: str = Field(description='استان در این فیلد قرار می گیرد')
|
||||
city: str = Field(description='شهر در این فیلد قرار می گیرد')
|
||||
project_code: Optional[str] = Field(description='کد در این فیلد قرار می گیرد')
|
||||
description: Optional[str] = Field(description='شرح قرارداد')
|
||||
number: Optional[str] = Field(description="شماره قرارداد")
|
||||
type:Optional[str] = Field(description=' نوع قرارداد')
|
||||
amount:Optional[int] = Field(description='مبلغ اولیه قرارداد')
|
||||
date_contract:Optional[datetime] = Field(description='تاریخ عقد قرارداد')
|
||||
end_date:Optional[datetime] = Field(description='تاریخ پایان قرارداد')
|
||||
notif_date:Optional[datetime] = Field(description='تاریخ ابلاغ قرارداد')
|
||||
name_employer:Optional[str] = Field(description='نام کارفرما')
|
||||
name_consultant:Optional[str] = Field(description='نام مشاور')
|
||||
collection:Optional[List[str]] = Field(description="""
|
||||
'ژئوتکنیک','طرح توجیحی','طراحی','نظارت کارگاهی','نظارت عالیه'
|
||||
""")
|
||||
addendum:Optional[List[AddendumModel]] = Field(description='الحاقیه')
|
||||
nature:Optional[str] = Field(description="""
|
||||
طراحی
|
||||
نظارت
|
||||
برونسپاری
|
||||
""")
|
||||
basic_fee : Optional[int] = Field(description='حق الزحمه مبنا')
|
||||
meter : Optional[str] = Field(description='متراژ پروژه')
|
||||
extension : Optional[List[ExtensionModel]] = Field(description='وضعیت تمدید قرارداد')
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import uuid
|
||||
|
||||
from pymongo import ReturnDocument
|
||||
|
||||
from app.config import TaskEnv
|
||||
from app.models.contract import ContractModel, AddendumModel, ExtensionModel
|
||||
from core.repositories.base import BaseRepository
|
||||
from core.service.mongo_db import use_collection
|
||||
from core.utils import get_time
|
||||
|
||||
|
||||
class ContractRepository(BaseRepository):
|
||||
def __init__(self):
|
||||
super().__init__(collection=TaskEnv.CLN_CONTRACT, model=ContractModel)
|
||||
|
||||
async def create_add(self,_id:uuid.UUID,_inp:AddendumModel):
|
||||
_inp.id = uuid.uuid4()
|
||||
_inp.created_at = get_time()
|
||||
_inp.updated_at = get_time()
|
||||
contract = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update(
|
||||
{"_id":_id},
|
||||
{"$push":{"addendum":_inp.dict()}},return_document=ReturnDocument.AFTER
|
||||
)
|
||||
return contract
|
||||
|
||||
async def update_add(self,_id:uuid.UUID,_inp:AddendumModel):
|
||||
_inp.updated_at = get_time()
|
||||
result = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update(
|
||||
{"_id": _id,'addendum.id':_inp.id},
|
||||
{
|
||||
"$set":{
|
||||
'addendum.$.number':_inp.number,
|
||||
'addendum.$.amount':_inp.amount,
|
||||
'addendum.$.description':_inp.description,
|
||||
'addendum.$.end_date':_inp.end_date,
|
||||
'addendum.$.updated_at':_inp.updated_at,
|
||||
}
|
||||
},return_document=ReturnDocument.AFTER)
|
||||
return result
|
||||
|
||||
async def create_extension(self, _id: uuid.UUID, _inp:ExtensionModel):
|
||||
_inp.id = uuid.uuid4()
|
||||
_inp.created_at = get_time()
|
||||
_inp.updated_at = get_time()
|
||||
contract = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update(
|
||||
{"_id": _id},
|
||||
{"$push": {"extension": _inp.dict()}}, return_document=ReturnDocument.AFTER
|
||||
)
|
||||
return contract
|
||||
|
||||
async def update_extention(self, _id: uuid.UUID, _inp:ExtensionModel):
|
||||
_inp.updated_at = get_time()
|
||||
result = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update(
|
||||
{"_id": _id,'extension.id':_inp.id},
|
||||
{
|
||||
"$set":{
|
||||
'extension.$.updated_at':_inp.updated_at,
|
||||
'extension.$.day_to_end':_inp.day_to_end,
|
||||
'extension.$.description':_inp.description,
|
||||
'extension.$.status':_inp.status
|
||||
}
|
||||
},return_document=ReturnDocument.AFTER)
|
||||
return result
|
||||
@@ -7,3 +7,4 @@ from .price_audit import *
|
||||
from .factor_audit import *
|
||||
from .program_audit import *
|
||||
from .bill_delay import *
|
||||
from .contract import *
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import Body
|
||||
|
||||
from app.models.contract import ContractModel, AddendumModel, ExtensionModel
|
||||
from app.repositories.contract import ContractRepository
|
||||
from core.app import app
|
||||
from core.utils.router import generate_router, shrink
|
||||
from core.utils.table_engine import TableEngineExport, TableEngineRequestType
|
||||
|
||||
ThisModel = ContractModel
|
||||
router_base_url = 'contract'
|
||||
_tag_base = [router_base_url]
|
||||
router = generate_router(router_base_url, auth_dependencies=False, version='v2')
|
||||
repo = ContractRepository()
|
||||
|
||||
@router.post('/add/create', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.create_add)
|
||||
def create_add(contract_id: UUID,coding: AddendumModel = Body(...)):
|
||||
pass
|
||||
|
||||
@router.put('/add/update', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.update_add)
|
||||
def update_add(contract_id: UUID,coding: AddendumModel = Body(...)):
|
||||
pass
|
||||
|
||||
@router.post('/extension/create', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.create_extension)
|
||||
def create_extension(contract_id: UUID,coding: ExtensionModel = Body(...)):
|
||||
pass
|
||||
|
||||
@router.put('/extension/create', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.update_extention)
|
||||
def update_extention(contract_id: UUID,coding: ExtensionModel = Body(...)):
|
||||
pass
|
||||
|
||||
@router.post('/create', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.create)
|
||||
def create(coding: ContractModel = Body(...)):
|
||||
pass
|
||||
|
||||
|
||||
@router.put('/{_id}', response_model=ContractModel, tags=_tag_base)
|
||||
@shrink(repo.update)
|
||||
def update(_id: UUID, coding: ContractModel = Body(...)):
|
||||
pass
|
||||
|
||||
@router.get('/{_id}', response_model=ThisModel, tags=_tag_base)
|
||||
@shrink(repo.get)
|
||||
def get(_id: UUID):
|
||||
pass
|
||||
|
||||
@router.delete('/{_id}', response_model=ThisModel, tags=_tag_base)
|
||||
@shrink(repo.delete)
|
||||
def delete(_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