diff --git a/src/front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes.ts b/src/front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes.ts new file mode 100644 index 00000000..0cb86bd3 --- /dev/null +++ b/src/front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes.ts @@ -0,0 +1,81 @@ +import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; +import { Service } from "typedi"; + +import BaseSuperAdmin from "../BaseSuperAdmin"; + +// TODO Type get query params -> Where + inclue + orderby +export interface IGetDocumentTypesparams { + where?: {}; + include?: {}; +} + +// TODO Type getbyuid query params + +export type IPutDocumentTypesParams = { +}; + +export interface IPostDocumentTypesParams {} + +@Service() +export default class DocumentTypes extends BaseSuperAdmin { + private static instance: DocumentTypes; + private readonly baseURl = this.namespaceUrl.concat("/document-types"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + public async get(q: IGetDocumentTypesparams): Promise { + const url = new URL(this.baseURl); + Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Create a Document + */ + public async post(body: any): Promise { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async put(uid: string, body: IPutDocumentTypesParams): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Components/DesignSystem/UserFolder/index.tsx b/src/front/Components/DesignSystem/UserFolder/index.tsx index 2abe3b37..289ef64c 100644 --- a/src/front/Components/DesignSystem/UserFolder/index.tsx +++ b/src/front/Components/DesignSystem/UserFolder/index.tsx @@ -53,7 +53,7 @@ export default class UserFolder extends React.Component { const otherDocuments: Document[] | null = this.getValidatedAndPendindDocuments(); const redirectPath = Module.getInstance() .get() - .modules.pages.Folder.pages.AskDocument.props.path.replace("[folderUid]", this.props.folder.uid ?? ""); + .modules.pages.Folder.pages.AskDocument.props.path.replace("[folderUid]", this.props.folder.uid ?? "").replace("[customerUid]", this.props.customer.uid ?? ""); return (
{ - private documentsType: IOption[] = [ - { label: "Carte d'identité", value: "carte_identite" }, - { label: "Diagnostic État Risques et Pollution", value: "diagnostic_erep" }, - { label: "Justificatif de domicile", value: "justificatif_domicile" }, - { label: "Diagnostic gaz", value: "diagnostic_gaz" }, - { label: "Compromis de vente", value: "compromis_de_vente" }, - { label: "Diagnostic DPE", value: "diagnostic_dpe" }, - { label: "Diagnostic électrique", value: "diagnostic_electrique" }, - { label: "Diagnostic plombs", value: "diagnostic_plombs" }, - { label: "Diagnostic amiante", value: "diagnostic_amiante" }, - { label: "Diagnostic termites", value: "diagnostic_termites" }, - { label: "Diagnostic État des nuisances sonores aériennes", value: "diagnostic_ednsa" }, - ]; - - public constructor(props: IProps) { +class AskDocumentsClass extends BasePage { + public constructor(props: IPropsClass) { super(props); this.state = { isCreateDocumentModalVisible: false, documentName: "", visibleDescription: "", + documentTypes: [], }; this.onFormSubmit = this.onFormSubmit.bind(this); @@ -65,8 +65,8 @@ export default class AskDocuments extends BasePage {
- {this.documentsType.map((documentType) => ( - + {this.state.documentTypes.map((documentType) => ( + ))}
@@ -117,6 +117,45 @@ export default class AskDocuments extends BasePage { ); } + public override async componentDidMount(): Promise { + try{ + const folder = await Folders.getInstance().getByUid(this.props.folderUid, { + q:{ + deed: { + include: { + deed_type: true + } + } + } + }); + if(!folder) return; + + const documentTypes = await DeedTypes.getInstance().getByUid(folder.deed!.deed_type!.uid!, { + q: { + deed_type_has_document_types: { + include: { + document_type: true + } + } + } + }) + + if(!documentTypes) return; + + const documentTypesOptions: IOption[] = documentTypes.deed_type_has_document_types!.map((documentType) => { + return { + label: documentType.document_type!.name!, + value: documentType.document_type!.uid!, + }; + }); + + this.setState({ + documentTypes: documentTypesOptions, + }); + }catch(e){ + console.error(e); + } + } private canAddDocument() { if (this.state.documentName === "" || this.state.visibleDescription === "") { return false; @@ -167,11 +206,39 @@ export default class AskDocuments extends BasePage { }); } - private onFormSubmit( + private async onFormSubmit( e: React.FormEvent | null, values: { - [key: string]: string; + [key: string]: any; } ) { + try{ + const documentAsked: [] = values["document_types"] as []; + await documentAsked.forEach(async (document) => { + await Documents.getInstance().post({ + folder: { + uid: this.props.folderUid + }, + depositor: { + uid: this.props.customerUid + }, + document_type: { + uid: document + } + }); + }); + + this.props.router.push(Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid)); + }catch(e){ + console.error(e); + } } } + +export default function AskDocuments(props: IProps){ + const router = useRouter(); + let { folderUid, customerUid } = router.query; + folderUid = folderUid as string; + customerUid = customerUid as string; + return ; +} diff --git a/src/front/Config/Module/development.json b/src/front/Config/Module/development.json index ed5d3660..882bd5dd 100644 --- a/src/front/Config/Module/development.json +++ b/src/front/Config/Module/development.json @@ -55,7 +55,7 @@ "AskDocument": { "enabled": true, "props": { - "path": "/folders/[folderUid]/ask-documents", + "path": "/folders/[folderUid]/[customerUid]/ask-documents", "labelKey": "ask_documents" } }, diff --git a/src/front/Config/Module/preprod.json b/src/front/Config/Module/preprod.json index ed5d3660..882bd5dd 100644 --- a/src/front/Config/Module/preprod.json +++ b/src/front/Config/Module/preprod.json @@ -55,7 +55,7 @@ "AskDocument": { "enabled": true, "props": { - "path": "/folders/[folderUid]/ask-documents", + "path": "/folders/[folderUid]/[customerUid]/ask-documents", "labelKey": "ask_documents" } }, diff --git a/src/front/Config/Module/production.json b/src/front/Config/Module/production.json index ed5d3660..882bd5dd 100644 --- a/src/front/Config/Module/production.json +++ b/src/front/Config/Module/production.json @@ -55,7 +55,7 @@ "AskDocument": { "enabled": true, "props": { - "path": "/folders/[folderUid]/ask-documents", + "path": "/folders/[folderUid]/[customerUid]/ask-documents", "labelKey": "ask_documents" } }, diff --git a/src/front/Config/Module/staging.json b/src/front/Config/Module/staging.json index ed5d3660..882bd5dd 100644 --- a/src/front/Config/Module/staging.json +++ b/src/front/Config/Module/staging.json @@ -55,7 +55,7 @@ "AskDocument": { "enabled": true, "props": { - "path": "/folders/[folderUid]/ask-documents", + "path": "/folders/[folderUid]/[customerUid]/ask-documents", "labelKey": "ask_documents" } }, diff --git a/src/pages/folders/[folderUid]/ask-documents/index.tsx b/src/pages/folders/[folderUid]/[customerUid]/ask-documents/index.tsx similarity index 100% rename from src/pages/folders/[folderUid]/ask-documents/index.tsx rename to src/pages/folders/[folderUid]/[customerUid]/ask-documents/index.tsx