Contract Signing and contract printing

This commit is contained in:
2023-03-08 21:59:10 +01:00
parent eaa79c3541
commit 5605ee9497
10 changed files with 230 additions and 46 deletions

View File

@@ -1,11 +1,12 @@
import uuid
from fastapi import Depends, HTTPException
from fastapi import Depends, HTTPException, File, UploadFile
import shutil
from ..core.routes import get_crud_router
from .routes_draft import draft_router
from .print import print_router
from .models import Contract, ContractDraft, replace_variables_in_value
from .models import Contract, ContractDraft, Party, replace_variables_in_value
from .schemas import ContractCreate, ContractRead, ContractUpdate
from ..entity.models import Entity
@@ -72,10 +73,31 @@ async def update(id: str, contract_form: ContractUpdate, user=Depends(get_curren
@contract_router.get("/signature/{signature_id}", response_description="")
async def get_signature(signature_id: str) -> ContractRead:
raise HTTPException(status_code=500, detail="Not implemented")
async def get_signature(signature_id: str) -> Party:
contract = await Contract.find_by_signature_id(signature_id)
signature = contract.get_signature(signature_id)
return signature
@contract_router.post("/signature/{signature_id}", response_description="")
async def affix_signature(signature_id: str, signature_form: ContractCreate) -> ContractRead:
raise HTTPException(status_code=500, detail="Not implemented")
async def affix_signature(signature_id: str, signature_file: UploadFile = File(...)) -> bool:
contract = await Contract.find_by_signature_id(signature_id)
signature_index = contract.get_signature_index(signature_id)
signature = contract.parties[signature_index]
if signature.signature_affixed:
raise HTTPException(status_code=400, detail="Signature already affixed")
with open("media/signatures/{}.png".format(signature_id), "wb") as buffer:
shutil.copyfileobj(signature_file.file, buffer)
update_query = {"$set": {
'parties.{}.signature_affixed'.format(signature_index): True
}}
signature.signature_affixed = True
if contract.is_signed():
update_query["$set"]['status'] = 'signed'
await contract.update(update_query)
return True