Compare commits

...

3 Commits

5 changed files with 60 additions and 53 deletions

View File

@@ -27,11 +27,11 @@ class ContractDraftStatus(str, Enum):
class DraftParty(BaseModel): class DraftParty(BaseModel):
entity_id: PydanticObjectId = ForeignKey("entities", "Entity", default="", title="Partie") entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, )
part: str = Field(title="Rôle") part: str = Field(title="Rôle")
representative_id: PydanticObjectId = ForeignKey("entities", "Entity", default="", title="Représentant") representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, )
class Config: class Config:
title = 'Partie' title = 'Partie'
@@ -64,7 +64,7 @@ class ContractProvisionTemplateReference(BaseModel):
"ProvisionTemplate", "ProvisionTemplate",
displayed_fields=['title', 'body'], displayed_fields=['title', 'body'],
props={"parametrized": True}, props={"parametrized": True},
default="", default=None,
title="Template de clause" title="Template de clause"
) )

View File

@@ -4,7 +4,7 @@ from typing import List, Literal, Optional
from pydantic import Field, BaseModel from pydantic import Field, BaseModel
from beanie import Indexed, PydanticObjectId from beanie import Indexed, PydanticObjectId
from firm.core.models import CrudDocument from firm.core.models import CrudDocument, ForeignKey
from firm.core.filter import Filter, FilterSchema from firm.core.filter import Filter, FilterSchema
@@ -39,16 +39,7 @@ class Individual(EntityType):
class Employee(BaseModel): class Employee(BaseModel):
position: Indexed(str) = Field(title='Poste') position: Indexed(str) = Field(title='Poste')
entity_id: PydanticObjectId = Field( entity_id: PydanticObjectId = ForeignKey("entities", "Entity", title='Employé')
foreignKey={
"reference": {
"resource": "entities",
"schema": "Entity",
"condition": "entity_data.type=individual"
}
},
title='Employé'
)
class Config: class Config:
title = 'Fiche Employé' title = 'Fiche Employé'

View File

@@ -1,35 +1,17 @@
from typing import List from typing import List, Optional
from html import unescape from html import unescape
from beanie import PydanticObjectId from beanie import PydanticObjectId
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry, ForeignKey
from firm.core.filter import Filter, FilterSchema from firm.core.filter import Filter, FilterSchema
class PartyTemplate(BaseModel): class PartyTemplate(BaseModel):
entity_id: PydanticObjectId = Field( entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
foreignKey={
"reference": {
"resource": "entities",
"schema": "Entity",
}
},
default="",
title="Partie"
)
part: str = Field(title="Rôle") part: str = Field(title="Rôle")
representative_id: PydanticObjectId = Field( representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
foreignKey={
"reference": {
"resource": "entities",
"schema": "Entity",
}
},
default="",
title="Représentant"
)
class Config: class Config:
title = 'Partie' title = 'Partie'
@@ -62,14 +44,10 @@ class ProvisionTemplate(CrudDocument):
class ProvisionTemplateReference(BaseModel): class ProvisionTemplateReference(BaseModel):
provision_template_id: PydanticObjectId = Field( provision_template_id: PydanticObjectId = ForeignKey(
foreignKey={ "templates/provisions",
"reference": { "TemplateProvision",
"resource": "templates/provisions", ['title', 'body'],
"schema": "ProvisionTemplate",
"displayedFields": ['title', 'body']
},
},
props={"parametrized": True}, props={"parametrized": True},
title="Template de clause" title="Template de clause"
) )

View File

@@ -78,8 +78,8 @@ export default function ArrayFieldTemplate<
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>, index) => ( items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>, index) => (
<Grid2 key={key} size={gridSize} > <Grid2 key={key} size={gridSize} >
<Grid2 container sx={{alignItems: "center"}} > <Grid2 container sx={{alignItems: "center"}} >
{numbered &&<Grid2 size={1} ><Typography variant="h4">{index + 1}</Typography></Grid2>} {numbered &&<Grid2 size={.5} ><Typography variant="h4">{index + 1}</Typography></Grid2>}
<Grid2 size={numbered ? 11 : 12} ><ArrayFieldItemTemplate key={key} {...itemProps} /></Grid2> <Grid2 size={numbered ? 11.5 : 12} ><ArrayFieldItemTemplate key={key} {...itemProps} /></Grid2>
</Grid2> </Grid2>
</Grid2> </Grid2>
))} ))}

View File

@@ -6,7 +6,7 @@ import ClearIcon from '@mui/icons-material/Clear';
import EditIcon from '@mui/icons-material/Edit'; import EditIcon from '@mui/icons-material/Edit';
import NoteAddIcon from '@mui/icons-material/NoteAdd'; import NoteAddIcon from '@mui/icons-material/NoteAdd';
import React, { useState, useEffect, useContext, Fragment } from "react"; import React, { useState, useEffect, useContext, Fragment } from "react";
import { useList, useOne } from "@refinedev/core"; import { useForm, useList, useOne } from "@refinedev/core";
import { ResourceContext } from "../../contexts/ResourceContext"; import { ResourceContext } from "../../contexts/ResourceContext";
import { CrudForm } from "../crud-form"; import { CrudForm } from "../crud-form";
@@ -103,7 +103,7 @@ const RealAutocomplete = <T = any, S extends ForeignKeySchema = ForeignKeySchema
aria-describedby="modal-modal-description" aria-describedby="modal-modal-description"
> >
<DialogContent> <DialogContent>
<FormContainer <FormContainerNew
schemaName={schema} schemaName={schema}
resourceBasePath={basePath} resourceBasePath={basePath}
resource={resource} resource={resource}
@@ -166,7 +166,7 @@ const ChosenValue = <T = any, S extends ForeignKeySchema = ForeignKeySchema, F e
aria-describedby="modal-modal-description" aria-describedby="modal-modal-description"
> >
<DialogContent> <DialogContent>
<FormContainer <FormContainerEdit
schemaName={schema} schemaName={schema}
resourceBasePath={basePath} resourceBasePath={basePath}
resource={resource} resource={resource}
@@ -203,11 +203,49 @@ type FormContainerProps = {
onSuccess: (data: any) => void onSuccess: (data: any) => void
} }
const FormContainer = (props: FormContainerProps) => { const FormContainerEdit = (props: FormContainerProps) => {
const { schemaName, resourceBasePath, resource, uiSchema = {}, id = undefined, onSuccess } = props; const { schemaName, resourceBasePath, resource, uiSchema = {}, id, onSuccess } = props;
const { onFinish, query, formLoading } = useForm({
resource: `${resourceBasePath}/${resource}`,
action: "edit",
id: id,
});
if (formLoading || query?.data === undefined) {
return <CircularProgress />
}
return ( return (
<Box sx={{ ...modalStyle, width: 800 }}> <Box sx={{ ...modalStyle, width: 800 }}>
<CrudForm schemaName={schemaName} resourceBasePath={resourceBasePath} resource={resource} uiSchema={uiSchema} id={id} onSuccess={(data) => onSuccess(data)} /> <CrudForm
schemaName={schemaName}
uiSchema={uiSchema}
resourceBasePath={resourceBasePath}
record={query.data.data}
onSubmit={(data:any) => {
onFinish(data);
onSuccess(data);
}} />
</Box>
)
}
const FormContainerNew = (props: FormContainerProps) => {
const { schemaName, resourceBasePath, resource, uiSchema = {}, onSuccess } = props;
const { onFinish } = useForm({
resource: `${resourceBasePath}/${resource}`,
action: "create"
});
return (
<Box sx={{ ...modalStyle, width: 800 }}>
<CrudForm
schemaName={schemaName}
uiSchema={uiSchema}
resourceBasePath={resourceBasePath}
onSubmit={(data:any) => {
onFinish(data);
onSuccess(data);
}} />
</Box> </Box>
) )
} }