Adding chtlawfirm to the api
This commit is contained in:
9
api/rpk-api/firm/template/__init__.py
Normal file
9
api/rpk-api/firm/template/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from firm.template.routes_contract import router as contract_router
|
||||
from firm.template.routes_provision import router as provision_router
|
||||
|
||||
template_router = APIRouter()
|
||||
|
||||
template_router.include_router(provision_router, prefix="/provision", )
|
||||
template_router.include_router(contract_router, prefix="/contract", )
|
||||
117
api/rpk-api/firm/template/models.py
Normal file
117
api/rpk-api/firm/template/models.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from typing import List
|
||||
from html import unescape
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry
|
||||
from firm.core.filter import Filter, FilterSchema
|
||||
|
||||
|
||||
class PartyTemplate(BaseModel):
|
||||
entity_id: str = Field(
|
||||
foreignKey={
|
||||
"reference": {
|
||||
"resource": "entity",
|
||||
"schema": "Entity",
|
||||
}
|
||||
},
|
||||
default="",
|
||||
title="Partie"
|
||||
)
|
||||
part: str = Field(title="Rôle")
|
||||
representative_id: str = Field(
|
||||
foreignKey={
|
||||
"reference": {
|
||||
"resource": "entity",
|
||||
"schema": "Entity",
|
||||
}
|
||||
},
|
||||
default="",
|
||||
title="Représentant"
|
||||
)
|
||||
|
||||
class Config:
|
||||
title = 'Partie'
|
||||
|
||||
|
||||
def remove_html_tags(text):
|
||||
"""Remove html tags from a string"""
|
||||
import re
|
||||
clean = re.compile('<.*?>')
|
||||
return re.sub(clean, '', text)
|
||||
|
||||
|
||||
class ProvisionTemplate(CrudDocument):
|
||||
"""
|
||||
Modèle de clause à décliner
|
||||
"""
|
||||
|
||||
name: str = Field(title="Nom")
|
||||
title: str = RichtextSingleline(title="Titre")
|
||||
body: str = RichtextMultiline(title="Corps")
|
||||
|
||||
def compute_label(self) -> str:
|
||||
return f"{self.name} - \"{unescape(remove_html_tags(self.title))}\""
|
||||
|
||||
class Settings(CrudDocument.Settings):
|
||||
fulltext_search = ['name', 'title', 'body']
|
||||
|
||||
class Config:
|
||||
title = 'Template de clause'
|
||||
|
||||
|
||||
class ProvisionTemplateReference(BaseModel):
|
||||
provision_template_id: str = Field(
|
||||
foreignKey={
|
||||
"reference": {
|
||||
"resource": "template/provision",
|
||||
"schema": "ProvisionTemplate",
|
||||
"displayedFields": ['title', 'body']
|
||||
},
|
||||
},
|
||||
props={"parametrized": True},
|
||||
title="Template de clause"
|
||||
)
|
||||
|
||||
class Config:
|
||||
title = 'Clause'
|
||||
|
||||
|
||||
class ContractTemplate(CrudDocument):
|
||||
"""
|
||||
Modèle de contrat à décliner
|
||||
"""
|
||||
name: str = Field(title="Nom")
|
||||
title: str = Field(title="Titre")
|
||||
parties: List[PartyTemplate] = Field(default=[], title="Parties")
|
||||
provisions: List[ProvisionTemplateReference] = Field(
|
||||
default=[],
|
||||
props={"items-per-row": "1", "numbered": True},
|
||||
title="Clauses"
|
||||
)
|
||||
variables: List[DictionaryEntry] = Field(
|
||||
default=[],
|
||||
format="dictionary",
|
||||
title="Variables"
|
||||
)
|
||||
|
||||
def compute_label(self) -> str:
|
||||
return f"{self.name} - \"{unescape(remove_html_tags(self.title))}\""
|
||||
|
||||
class Settings(CrudDocument.Settings):
|
||||
fulltext_search = ['name', 'title']
|
||||
|
||||
class Config:
|
||||
title = 'Template de contrat'
|
||||
|
||||
|
||||
class ContractTemplateFilters(FilterSchema):
|
||||
class Constants(Filter.Constants):
|
||||
model = ContractTemplate
|
||||
search_model_fields = ["label"]
|
||||
|
||||
|
||||
class ProvisionTemplateFilters(FilterSchema):
|
||||
class Constants(Filter.Constants):
|
||||
model = ProvisionTemplate
|
||||
search_model_fields = ["label"]
|
||||
5
api/rpk-api/firm/template/routes_contract.py
Normal file
5
api/rpk-api/firm/template/routes_contract.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from firm.core.routes import get_crud_router
|
||||
from firm.template.models import ContractTemplate, ContractTemplateFilters
|
||||
from firm.template.schemas import ContractTemplateCreate, ContractTemplateRead, ContractTemplateUpdate
|
||||
|
||||
router = get_crud_router(ContractTemplate, ContractTemplateCreate, ContractTemplateRead, ContractTemplateUpdate, ContractTemplateFilters)
|
||||
5
api/rpk-api/firm/template/routes_provision.py
Normal file
5
api/rpk-api/firm/template/routes_provision.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from firm.core.routes import get_crud_router
|
||||
from firm.template.models import ProvisionTemplate, ProvisionTemplateFilters
|
||||
from firm.template.schemas import ProvisionTemplateCreate, ProvisionTemplateRead, ProvisionTemplateUpdate
|
||||
|
||||
router = get_crud_router(ProvisionTemplate, ProvisionTemplateCreate, ProvisionTemplateRead, ProvisionTemplateUpdate, ProvisionTemplateFilters)
|
||||
51
api/rpk-api/firm/template/schemas.py
Normal file
51
api/rpk-api/firm/template/schemas.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from pydantic import Field
|
||||
from typing import List
|
||||
|
||||
from firm.template.models import ContractTemplate, ProvisionTemplate, PartyTemplate, ProvisionTemplateReference, DictionaryEntry
|
||||
from firm.core.schemas import Writer, Reader
|
||||
from firm.core.models import RichtextMultiline, RichtextSingleline
|
||||
|
||||
|
||||
class ContractTemplateRead(Reader, ContractTemplate):
|
||||
pass
|
||||
|
||||
|
||||
class ContractTemplateCreate(Writer):
|
||||
name: str = Field(title="Nom")
|
||||
title: str = Field(title="Titre")
|
||||
parties: List[PartyTemplate] = Field(default=[], title="Parties")
|
||||
provisions: List[ProvisionTemplateReference] = Field(
|
||||
default=[],
|
||||
props={"items-per-row": "1", "numbered": True},
|
||||
title="Clauses"
|
||||
)
|
||||
variables: List[DictionaryEntry] = Field(
|
||||
default=[],
|
||||
format="dictionary",
|
||||
props={"required": False},
|
||||
title="Variables"
|
||||
)
|
||||
|
||||
class Config:
|
||||
title = 'Template de Contrat'
|
||||
|
||||
|
||||
class ContractTemplateUpdate(ContractTemplateCreate):
|
||||
pass
|
||||
|
||||
|
||||
class ProvisionTemplateRead(Reader, ProvisionTemplate):
|
||||
pass
|
||||
|
||||
|
||||
class ProvisionTemplateCreate(Writer):
|
||||
name: str = Field(title="Nom")
|
||||
title: str = RichtextSingleline(title="Titre")
|
||||
body: str = RichtextMultiline(title="Corps")
|
||||
|
||||
class Config:
|
||||
title = 'Template de Clause'
|
||||
|
||||
|
||||
class ProvisionTemplateUpdate(ProvisionTemplateCreate):
|
||||
pass
|
||||
Reference in New Issue
Block a user