Adding contracts and provisions templates
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"], )
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
5
back/app/template/routes_provision.py
Normal file
5
back/app/template/routes_provision.py
Normal 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)
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user