64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
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
|