feat:add contract

This commit is contained in:
shahzeydyfah
2024-05-17 19:26:24 +03:30
parent ef37a6edc5
commit b66c37f547
5 changed files with 185 additions and 0 deletions
+2
View File
@@ -5,3 +5,5 @@ class TaskEnv:
CLN_AUDIT_FACTOR = 'audit_factor'
CLN_AUDIT_PROGRAM = 'audit_program'
CLN_BILL_DELAY = 'bill_delay'
CLN_CONTRACT = 'contract'
+56
View File
@@ -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='وضعیت تمدید قرارداد')
+63
View File
@@ -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
+1
View File
@@ -7,3 +7,4 @@ from .price_audit import *
from .factor_audit import *
from .program_audit import *
from .bill_delay import *
from .contract import *
+63
View File
@@ -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)