Files
sakhteman/app/repositories/contract.py
T

92 lines
3.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
from core.utils.table_engine import TableEngineRequestType, TableEngineExport
from typing import TypeVar
from core.utils.te import NewTableEngine
T = TypeVar('T')
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
async def get_list(self,project_id:uuid.UUID):
contract = await use_collection(TaskEnv.CLN_CONTRACT).find(
{"project_id": project_id}
).to_list(None)
return contract
async def fetch_report(self, _input: TableEngineRequestType):
query = await NewTableEngine.mongo(
query_class=use_collection(TaskEnv.CLN_CONTRACT),
soft_deleted=True,
model=ContractModel,
return_query=True,
inputs=_input.te) \
.to_dict()
print(query)
if query:
count = await use_collection(TaskEnv.CLN_CONTRACT).aggregate([
{'$match':query['query']},
{'$group': {"_id": None, 'count': {'$sum': 1},'sum':{"$sum":"$amount"}}}
]).to_list(None)
return count[0]
else:
return []