Fix somes issues

This commit is contained in:
Anthony Janin 2025-07-01 17:35:23 +02:00
parent c939065562
commit ca5a59c51a
10 changed files with 145 additions and 41 deletions

View File

@ -156,6 +156,7 @@ export default function AddClientToFolder(props: IProps) {
); );
const loadCustomers = useCallback(async () => { const loadCustomers = useCallback(async () => {
LoaderService.getInstance().show();
CustomerService.getCustomers().then(async (processes: any[]) => { CustomerService.getCustomers().then(async (processes: any[]) => {
const availableCustomers: any[] = processes.map((process: any) => process.processData); const availableCustomers: any[] = processes.map((process: any) => process.processData);
@ -176,6 +177,8 @@ export default function AddClientToFolder(props: IProps) {
setExistingCustomers(existingCustomers); setExistingCustomers(existingCustomers);
setIsLoaded(true); setIsLoaded(true);
setSelectedOption(selectedOption); setSelectedOption(selectedOption);
LoaderService.getInstance().hide();
}); });
}, [folderUid, getFolderPreSelectedCustomers]); }, [folderUid, getFolderPreSelectedCustomers]);

View File

@ -17,6 +17,7 @@ import backgroundImage from "@Assets/images/background_refonte.svg";
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService"; import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
export default function AskDocuments() { export default function AskDocuments() {
const router = useRouter(); const router = useRouter();
@ -58,8 +59,8 @@ export default function AskDocuments() {
) => { ) => {
try { try {
// TODO: review // TODO: review
LoaderService.getInstance().show();
const documentAsked: [] = values["document_types"] as []; const documentAsked: [] = values["document_types"] as [];
for (let i = 0; i < documentAsked.length; i++) { for (let i = 0; i < documentAsked.length; i++) {
const documentData: any = { const documentData: any = {
folder: { folder: {
@ -77,7 +78,6 @@ export default function AskDocuments() {
await DocumentService.createDocument(documentData, validatorId); await DocumentService.createDocument(documentData, validatorId);
} }
router.push( router.push(
Module.getInstance() Module.getInstance()
.get() .get()
@ -127,11 +127,13 @@ export default function AskDocuments() {
const loadData = useCallback(async () => { const loadData = useCallback(async () => {
try { try {
LoaderService.getInstance().show();
FolderService.getFolderByUid(folderUid as string).then(async (process: any) => { FolderService.getFolderByUid(folderUid as string).then(async (process: any) => {
if (process) { if (process) {
const folder: any = process.processData; const folder: any = process.processData;
setFolder(folder); setFolder(folder);
setDocumentTypes(await getAvailableDocuments(folder)); setDocumentTypes(await getAvailableDocuments(folder));
LoaderService.getInstance().hide();
} }
}); });
} catch (e) { } catch (e) {

View File

@ -17,6 +17,7 @@ import Note from "le-coffre-resources/dist/Customer/Note";
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService"; import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
import CustomerService from "src/common/Api/LeCoffreApi/sdk/CustomerService"; import CustomerService from "src/common/Api/LeCoffreApi/sdk/CustomerService";
import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService"; import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
type IProps = {}; type IProps = {};
@ -83,6 +84,8 @@ class CreateCustomerNoteClass extends BasePage<IPropsClass, IState> {
const customer = await Customers.getInstance().getByUid(this.props.customerUid); const customer = await Customers.getInstance().getByUid(this.props.customerUid);
*/ */
LoaderService.getInstance().show();
const folder: any = await FolderService.getFolderByUid(this.props.folderUid).then((process: any) => { const folder: any = await FolderService.getFolderByUid(this.props.folderUid).then((process: any) => {
if (process) { if (process) {
const folder: any = process.processData; const folder: any = process.processData;
@ -97,6 +100,8 @@ class CreateCustomerNoteClass extends BasePage<IPropsClass, IState> {
} }
}); });
LoaderService.getInstance().hide();
//get the note of the folder that has customer_uid = this.props.customer.uid //get the note of the folder that has customer_uid = this.props.customer.uid
// const folderNote = folder.notes?.find((note) => note.customer?.uid === this.props.customerUid); // const folderNote = folder.notes?.find((note) => note.customer?.uid === this.props.customerUid);
// this.setState({ note, folder: note.office_folder || null, customer: note.customer || null }); // this.setState({ note, folder: note.office_folder || null, customer: note.customer || null });
@ -121,6 +126,7 @@ class CreateCustomerNoteClass extends BasePage<IPropsClass, IState> {
}; };
const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0'; const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0';
LoaderService.getInstance().show();
NoteService.createNote(noteData, validatorId).then(() => { NoteService.createNote(noteData, validatorId).then(() => {
this.props.router.push(this.backwardPath); this.props.router.push(this.backwardPath);
}); });

View File

@ -4,6 +4,7 @@ import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography";
import React, { useCallback } from "react"; import React, { useCallback } from "react";
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
type IProps = { type IProps = {
documentUid: string; documentUid: string;
@ -16,7 +17,8 @@ export default function DeleteAskedDocumentModal(props: IProps) {
const { isOpen, onClose, documentUid, onDeleteSuccess } = props; const { isOpen, onClose, documentUid, onDeleteSuccess } = props;
const onDelete = useCallback( const onDelete = useCallback(
() => () => {
LoaderService.getInstance().show();
new Promise<void>( new Promise<void>(
(resolve: () => void) => { (resolve: () => void) => {
DocumentService.getDocumentByUid(documentUid).then((process: any) => { DocumentService.getDocumentByUid(documentUid).then((process: any) => {
@ -27,8 +29,10 @@ export default function DeleteAskedDocumentModal(props: IProps) {
}) })
.then(() => onDeleteSuccess(documentUid)) .then(() => onDeleteSuccess(documentUid))
.then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." })) .then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." }))
.then(() => LoaderService.getInstance().hide())
.then(onClose) .then(onClose)
.catch((error) => console.warn(error)), .catch((error) => console.warn(error));
},
[documentUid, onClose, onDeleteSuccess], [documentUid, onClose, onDeleteSuccess],
); );

View File

@ -1,9 +1,11 @@
import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary";
import Modal from "@Front/Components/DesignSystem/Modal"; import Modal from "@Front/Components/DesignSystem/Modal";
import { ToasterService } from "@Front/Components/DesignSystem/Toaster"; import { ToasterService } from "@Front/Components/DesignSystem/Toaster";
import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography";
import React, { useCallback } from "react"; import React, { useCallback } from "react";
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
type IProps = { type IProps = {
documentUid: string; documentUid: string;
isOpen: boolean; isOpen: boolean;
@ -15,13 +17,18 @@ export default function DeleteSentDocumentModal(props: IProps) {
const { isOpen, onClose, documentUid, onDeleteSuccess } = props; const { isOpen, onClose, documentUid, onDeleteSuccess } = props;
const onDelete = useCallback( const onDelete = useCallback(
() => () => {
DocumentsNotary.getInstance() LoaderService.getInstance().show();
.delete(documentUid) DocumentService.getDocumentByUid(documentUid).then((process: any) => {
if (process) {
DocumentService.updateDocument(process, { isDeleted: 'true' })
.then(() => onDeleteSuccess(documentUid)) .then(() => onDeleteSuccess(documentUid))
.then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." })) .then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." }))
.then(onClose) .then(() => LoaderService.getInstance().hide())
.catch((error) => console.warn(error)), .then(onClose);
}
});
},
[documentUid, onClose, onDeleteSuccess], [documentUid, onClose, onDeleteSuccess],
); );

View File

@ -1,4 +1,3 @@
import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary";
import FilesNotary from "@Front/Api/LeCoffreApi/Notary/FilesNotary/Files"; import FilesNotary from "@Front/Api/LeCoffreApi/Notary/FilesNotary/Files";
import CircleProgress from "@Front/Components/DesignSystem/CircleProgress"; import CircleProgress from "@Front/Components/DesignSystem/CircleProgress";
import IconButton from "@Front/Components/DesignSystem/IconButton"; import IconButton from "@Front/Components/DesignSystem/IconButton";
@ -24,6 +23,7 @@ import DeleteSentDocumentModal from "./DeleteSentDocumentModal";
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
import DocumentTypeService from "src/common/Api/LeCoffreApi/sdk/DocumentTypeService"; import DocumentTypeService from "src/common/Api/LeCoffreApi/sdk/DocumentTypeService";
import FileService from "src/common/Api/LeCoffreApi/sdk/FileService"; import FileService from "src/common/Api/LeCoffreApi/sdk/FileService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
type IProps = { type IProps = {
customerUid: string; customerUid: string;
@ -55,14 +55,13 @@ export default function DocumentTables(props: IProps) {
const fetchDocuments = useCallback( const fetchDocuments = useCallback(
() => { () => {
setDocuments([]); LoaderService.getInstance().show();
DocumentService.getDocuments().then(async (processes: any[]) => { DocumentService.getDocuments().then(async (processes: any[]) => {
if (processes.length > 0) { if (processes.length > 0) {
let documents: any[] = processes.map((process: any) => process.processData); let documents: any[] = processes.map((process: any) => process.processData);
// FilterBy folder.uid & depositor.uid // FilterBy folder.uid & depositor.uid
documents = documents.filter((document: any) => document.folder.uid === folderUid && document.depositor.uid === customerUid); documents = documents.filter((document: any) => document.folder.uid === folderUid && document.depositor && document.depositor.uid === customerUid);
for (const document of documents) { for (const document of documents) {
document.document_type = (await DocumentTypeService.getDocumentTypeByUid(document.document_type.uid)).processData; document.document_type = (await DocumentTypeService.getDocumentTypeByUid(document.document_type.uid)).processData;
@ -80,24 +79,45 @@ export default function DocumentTables(props: IProps) {
} else { } else {
setDocuments([]); setDocuments([]);
} }
}) LoaderService.getInstance().hide();
});
}, },
[customerUid, folderUid], [customerUid, folderUid],
); );
const fetchDocumentsNotary = useCallback( const fetchDocumentsNotary = useCallback(
() => () => {
DocumentsNotary.getInstance() LoaderService.getInstance().show();
.get({ where: { folder: { uid: folderUid }, customer: { uid: customerUid } }, include: { files: true } }) DocumentService.getDocuments().then(async (processes: any[]) => {
.then(setDocumentsNotary) if (processes.length > 0) {
.catch(console.warn), let documents: any[] = processes.map((process: any) => process.processData);
// FilterBy folder.uid & customer.uid
documents = documents.filter((document: any) => document.folder.uid === folderUid && document.customer && document.customer.uid === customerUid);
for (const document of documents) {
if (document.files && document.files.length > 0) {
const files: any[] = [];
for (const file of document.files) {
files.push((await FileService.getFileByUid(file.uid)).processData);
}
document.files = files;
}
}
setDocumentsNotary(documents);
} else {
setDocumentsNotary([]);
}
LoaderService.getInstance().hide();
});
},
[customerUid, folderUid], [customerUid, folderUid],
); );
useEffect(() => { useEffect(() => {
// TODO: review
fetchDocuments(); fetchDocuments();
//fetchDocumentsNotary(); fetchDocumentsNotary();
}, [fetchDocuments, fetchDocumentsNotary]); }, [fetchDocuments, fetchDocumentsNotary]);
const openDeleteAskedDocumentModal = useCallback( const openDeleteAskedDocumentModal = useCallback(

View File

@ -135,7 +135,7 @@ export default function FolderInformation(props: IProps) {
if (processes.length > 0) { if (processes.length > 0) {
const documents: any[] = processes.map((process: any) => process.processData); const documents: any[] = processes.map((process: any) => process.processData);
for (const customer of folder.customers) { for (const customer of folder.customers) {
customer.documents = documents.filter((document: any) => document.depositor.uid === customer.uid); customer.documents = documents.filter((document: any) => document.depositor && document.depositor.uid === customer.uid);
} }
} }
resolve(); resolve();

View File

@ -1,6 +1,5 @@
import backgroundImage from "@Assets/images/background_refonte.svg"; import backgroundImage from "@Assets/images/background_refonte.svg";
import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary"; import { EDocumentNotaryStatus } from "le-coffre-resources/dist/Notary/DocumentNotary";
import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders";
import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button";
import DragAndDrop from "@Front/Components/DesignSystem/DragAndDrop"; import DragAndDrop from "@Front/Components/DesignSystem/DragAndDrop";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
@ -19,6 +18,11 @@ import React, { useCallback, useEffect, useMemo, useState } from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
import FileService from "src/common/Api/LeCoffreApi/sdk/FileService";
enum EClientSelection { enum EClientSelection {
ALL_CLIENTS = "all_clients", ALL_CLIENTS = "all_clients",
SELECTED_CLIENTS = "selected_clients", SELECTED_CLIENTS = "selected_clients",
@ -59,6 +63,64 @@ export default function SendDocuments() {
throw new Error("No clients selected"); throw new Error("No clients selected");
} }
LoaderService.getInstance().show();
for (const selectedClient of selectedClients) {
for (const file of files) {
await new Promise<void>((resolve: () => void) => {
const reader = new FileReader();
reader.onload = (event) => {
if (event.target?.result) {
const arrayBuffer = event.target.result as ArrayBuffer;
const uint8Array = new Uint8Array(arrayBuffer);
const fileBlob: any = {
type: file.type,
data: uint8Array
};
const fileData: any = {
file_blob: fileBlob,
file_name: file.name
};
const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0';
FileService.createFile(fileData, validatorId).then((processCreated: any) => {
const fileUid: string = processCreated.processData.uid;
const documentData: any = {
folder: {
uid: folderUid as string
},
customer: {
uid: selectedClient as string
},
files: [
{
uid: fileUid
}
],
document_status: EDocumentNotaryStatus.SENT
};
DocumentService.createDocument(documentData, validatorId).then(() => resolve());
});
}
};
reader.readAsArrayBuffer(file);
});
}
}
LoaderService.getInstance().hide();
router.push(
Module.getInstance()
.get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string),
);
setIsSending(false);
ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." });
/*
await Promise.all( await Promise.all(
selectedClients.map(async (customer) => { selectedClients.map(async (customer) => {
const promises = files.map(async (file) => { const promises = files.map(async (file) => {
@ -83,6 +145,7 @@ export default function SendDocuments() {
); );
setIsSending(false); setIsSending(false);
ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." }); ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." });
*/
} catch (error) { } catch (error) {
setIsSending(false); setIsSending(false);
console.warn("Error while sending files: ", error); console.warn("Error while sending files: ", error);
@ -92,18 +155,14 @@ export default function SendDocuments() {
); );
const fetchFolder = useCallback(async () => { const fetchFolder = useCallback(async () => {
Folders.getInstance() LoaderService.getInstance().show();
.getByUid(folderUid as string, { FolderService.getFolderByUid(folderUid as string).then((process: any) => {
q: { if (process) {
customers: { const folder: any = process.processData;
include: { setFolder(folder);
contact: true, LoaderService.getInstance().hide();
}, }
}, });
},
})
.then((folder) => setFolder(folder))
.catch((e) => console.warn(e));
}, [folderUid]); }, [folderUid]);
const onClientSelectionChange = useCallback( const onClientSelectionChange = useCallback(

View File

@ -13,6 +13,7 @@ import classes from "./classes.module.scss";
import Note from "le-coffre-resources/dist/Customer/Note"; import Note from "le-coffre-resources/dist/Customer/Note";
import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService"; import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService";
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
type IProps = {}; type IProps = {};
@ -67,6 +68,7 @@ class UpdateCustomerNoteClass extends BasePage<IPropsClass, IState> {
} }
public override async componentDidMount() { public override async componentDidMount() {
LoaderService.getInstance().show();
NoteService.getNoteByUid(this.props.noteUid).then((process: any) => { NoteService.getNoteByUid(this.props.noteUid).then((process: any) => {
if (process) { if (process) {
const note: any = process.processData; const note: any = process.processData;
@ -80,15 +82,17 @@ class UpdateCustomerNoteClass extends BasePage<IPropsClass, IState> {
.get() .get()
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", note.folder?.uid!), .modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", note.folder?.uid!),
}); });
LoaderService.getInstance().hide();
} }
}); });
} }
private async onFormSubmit(e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) { private async onFormSubmit(e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) {
try { try {
LoaderService.getInstance().show();
NoteService.getNoteByUid(this.props.noteUid).then((process: any) => { NoteService.getNoteByUid(this.props.noteUid).then((process: any) => {
if (process) { if (process) {
NoteService.updateNote(process, { content: values["content"] }).then(() => { NoteService.updateNote(process, { content: values["content"] }).then(() => {
this.props.router.push(this.state.backwardPath); this.props.router.push(this.state.backwardPath);
}); });

View File

@ -49,7 +49,6 @@ export default function UpdateFolderMetadata() {
setValidationError(validationErrors as ValidationError[]); setValidationError(validationErrors as ValidationError[]);
return; return;
} }
try { try {
LoaderService.getInstance().show(); LoaderService.getInstance().show();
FolderService.getFolderByUid(folderUid).then((process: any) => { FolderService.getFolderByUid(folderUid).then((process: any) => {