Adding contracts and provisions templates

This commit is contained in:
2023-01-31 23:56:48 +01:00
parent c360878b5a
commit 35c37749f3
12 changed files with 302 additions and 54 deletions

View File

@@ -4,6 +4,7 @@ from beanie import init_beanie
from .user import User, AccessToken
from .entity.models import Entity
from .template.models import ContractTemplate, ProvisionTemplate
from .order.models import Order
from .contract.models import Contract
@@ -16,5 +17,5 @@ async def init_db():
)
await init_beanie(database=client.db_name,
document_models=[User, AccessToken, Entity, Order, Contract, ],
document_models=[User, AccessToken, Entity, ContractTemplate, ProvisionTemplate, Order, Contract, ],
allow_index_dropping=True)

View File

@@ -1,9 +1,9 @@
from fastapi import APIRouter
from .routes_contract import router as contract_router
from .routes_clause import router as clause_router
from .routes_provision import router as provision_router
template_router = APIRouter()
template_router.include_router(contract_router, prefix="/contract", tags=["template"], )
template_router.include_router(clause_router, prefix="/clause", tags=["template"], )
template_router.include_router(provision_router, prefix="/provision", tags=["template"], )

View File

@@ -1,34 +1,48 @@
from datetime import datetime
from typing import List
from enum import Enum
from pydantic import BaseModel, Field
from beanie import Document
from pydantic import BaseModel, Field, validator
class ContractType(str, Enum):
individual = 'individual'
corporation = 'corporation'
from ..core.models import CrudDocument, text_area
class PartyTemplate(BaseModel):
entity_id: str
entity_id: str = Field(
foreignKey={
"reference": {
"resource": "entity",
"schema": "Entity",
}
},
default=""
)
part: str
class ProvisionTemplate(CrudDocument):
name: str
address: str
title: str
label: str = None
body: str = text_area(size=8)
@validator("label", always=True)
def generate_label(cls, v, values, **kwargs):
return "{} - \"{}\"".format(values['name'], values['title'])
class Settings(CrudDocument.Settings):
fulltext_search = ['name', 'title', 'body']
class ClauseTemplate(Document):
class ProvisionReference(BaseModel):
provision_template_id: str = Field(foreignKey={
"reference": {
"resource": "template/provision",
"schema": "ProvisionTemplate",
}
})
class ContractTemplate(CrudDocument):
name: str
body: str
created_at: datetime = Field(default=datetime.utcnow(), nullable=False)
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)
parties: List[PartyTemplate] = []
provisions: List[ProvisionReference] = []
class ContractTemplate(Document):
id: str
type: ContractType
parties: List[PartyTemplate]
clauses: List[ClauseTemplate]
created_at: datetime = Field(default=datetime.utcnow(), nullable=False)
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)

View File

@@ -1,5 +0,0 @@
from ..core.routes import get_crud_router
from .models import ClauseTemplate
from .schemas import ClauseTemplateCreate, ClauseTemplateRead, ClauseTemplateUpdate
router = get_crud_router(ClauseTemplate, ClauseTemplateCreate, ClauseTemplateRead, ClauseTemplateUpdate)

View File

@@ -0,0 +1,5 @@
from ..core.routes import get_crud_router
from .models import ProvisionTemplate
from .schemas import ProvisionTemplateCreate, ProvisionTemplateRead, ProvisionTemplateUpdate
router = get_crud_router(ProvisionTemplate, ProvisionTemplateCreate, ProvisionTemplateRead, ProvisionTemplateUpdate)

View File

@@ -1,32 +1,36 @@
import uuid
from datetime import datetime
from pydantic import BaseModel
from typing import List
from .models import ContractTemplate, ClauseTemplate
from .models import ContractTemplate, ProvisionTemplate, PartyTemplate, ProvisionReference
from ..core.schemas import Writer
from ..core.models import text_area
class ContractTemplateRead(ContractTemplate):
pass
class ContractTemplateCreate(BaseModel):
class ContractTemplateCreate(Writer):
name: str
class ContractTemplateUpdate(BaseModel):
name: str
parties: List[PartyTemplate] = []
provisions: List[ProvisionReference] = []
class ClauseTemplateRead(ClauseTemplate):
class ProvisionTemplateRead(ProvisionTemplate):
pass
class ClauseTemplateCreate(BaseModel):
class ProvisionTemplateCreate(Writer):
name: str
body: str
title: str
body: str = text_area(size=8)
class ClauseTemplateUpdate(BaseModel):
class ProvisionTemplateUpdate(BaseModel):
name: str
title: str
body: str